通过params穿过铁轨形式

时间:2014-07-19 08:01:21

标签: html ruby-on-rails ruby

我正在使用rails 4,并有主题和评论模型。主题是与评论的一对多关系。我想要一个简单的页面,可以在同一页面上为许多主题添加注释。所以在我的表单中,我知道如何提交评论来创建但我不知道如何在我的控制器中找到正确的主题来添加它。有什么建议吗?

class CommentsController < ApplicationController
  def create
    comment = Comment.create(comment_params)
    if comment.save
      # The line below is incorrect, I dont know what to do
      Subject.find(params[:subject_id]).comments << comment
      redirect_to(:controller => 'static_pages', action: 'home')
    end
  end

  def new
  end

  private

  def comment_params
      params.require(:comment).permit(:text, :user_name)
  end

end
  

StaticPages #home

找我   应用程序/视图/ static_pages / home.html.erb

<% @subjects.each do |subject| %>
  <div class="subjects <%= cycle('odd', 'even') %>">

  <h1><%= subject.name %></h1>
  <h3><%= subject.description %></h3>

    <% subject.comments.each do |comment|%>
        <div class="comment">
        <h4><%= comment.user_name%></h4>
        <%= comment.text  %>
        </div>
    <% end %>

    <%= form_for(@comment) do |f| %>
        <%= f.label :user_name %>
        <%= f.text_field :user_name %>

        <%= f.label :text %>
        <%= f.text_field :text %>

        <%= f.submit('Create comment', subject_id: subject.id) %>
    <% end %>


  </div>
<% end %>

1 个答案:

答案 0 :(得分:2)

最简单的方法是填充subject_id表单的@comment属性,如下所示:

<%= form_for(@comment) do |f| %>
    <%= f.label :user_name %>
    <%= f.text_field :user_name %>

    <%= f.label :text %>
    <%= f.text_field :text %>

    <%= f.hidden_field :subject_id, value: subject.id %>

    <%= f.submit('Create comment', subject_id: subject.id) %>
<% end %>

这将填充新subject_id对象的Comment属性,这将基本上通过Rails&#39;后端:

enter image description here

#app/controllers/your_controller.rb
Class YourController < ApplicationController
   def create
       @comment = Comment.new comment_params
       @comment.save
   end

   private

   def comment_params
       params.require(:comment).permit(:subject_id, :text, :user_name)
   end
end

-

<强> foreign_keys

这是因为Rails /关系数据库foreign_keys结构

每次将两个对象与Rails或其他关系数据库系统相关联时,您基本上都有一个链接这两个对象的数据库列。这称为foreign_key,在您的情况下,每个Comment都会有subject_id foreign_key列,并将其与相关主题相关联

因此,使用相同的@comment变量可能有许多不同的形式 - 诀窍是为每个变量填充foreign_key