我正在使用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 %>
答案 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;后端:
#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