【问题标题】:How to pass an id to a different view如何将 id 传递给不同的视图
【发布时间】:2013-10-04 09:56:21
【问题描述】:

我有一个 has_many :through 关系,以及休闲场景: 用户可以创建一个project 并将许多words 添加到该项目中。 “单词”只会在数据库中存储一次,如果它们已经存在于连接表中,则会创建关联。

到目前为止我所拥有的:

project controller 这是将项目添加到表中并重定向到显示页面,其中是另一个 simple_form_for,所有单词都将在其中。

def show
 @word = word.new
end

Project show View

<%= simple_form_for @word do |f|%>
    <%=f.input :name%>
    <%=f.button :submit%>
<%end%>

word controllercreate action 我想获取项目 ID 并填充 join tablewords 表。

@project = Project.find(params[:id])

那么我怎样才能获得project_id 并填充连接表并使用find_or_create_by 填充words 表。

(我知道project_id可以在URL中找到,我也可以使用@project.id打印出来)在视图中

谢谢

【问题讨论】:

    标签: ruby-on-rails activerecord simple-form


    【解决方案1】:

    如果我的问题是正确的,您想在项目和单词之间创建 has_and_belongs_to_many 关系。 所以在你的 Project.rb 添加

    has_and_belongs_to_many :words
    

    在你的 Word.rb 中添加

    has_and_belongs_to_many :projects
    

    现在为这种关系创建一个新表 projects_words,其中包含两个字段“project_id”和“word_id”

    在项目控制器里面显示动作

    @words = Word.new
    

    在项目的显示页面中添加:-

    <%= form_for @word,:url => words_path(:project_id => @project.id) do |f|%>
      <%=f.label :name%>
      <%=f.text_field :name%>
      <%=f.button :submit%>
    <%end%>
    

    现在在单词控制器中创建操作如下:-

    @word = Word.find_or_create_by_name(params[:word][:name])
    @word.projects = Project.where(:id => params[:project_id])
    @word.save
    

    【讨论】:

      【解决方案2】:

      我认为你可以像这样在 URL 中传递项目 ID,

      项目控制器:

      def show
        @project = Project.find(params[:id])
      end
      

      projects/show.html.erb

      <%= simple_form_for @word, :url => words_path(:project_id=> @project.id), :method => :post do |f| %>
        <%=f.input :name%>
        <%=f.button :submit%>
      <%end%>
      

      对不起,如果这不起作用,我还没有测试过。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-04-21
        • 2021-06-25
        • 2013-08-07
        • 2011-11-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多