我有一个has_many:through关系,以及以下情况:
用户可以创建project
并向该项目添加许多words
。 “单词”将仅存储在数据库中一次,如果它们已存在于连接表中,则将创建关联。
到目前为止我所拥有的:
A 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 controller
create action
我想获取项目ID并填充join table
和words
表。
@project = Project.find(params[:id])
那么如何获取project_id
并填充连接表并使用find_or_create_by
填充words
表。
(我知道可以在网址中找到project_id
,我也可以在视图中使用@project.id
打印)
谢谢
答案 0 :(得分:2)
如果我正确地提出问题,您希望在项目和单词之间创建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'
在show action
中的项目控制器中@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
答案 1 :(得分:0)
我认为你可以像这样在URL中传递项目ID,
项目管理员:
def show
@project = Project.find(params[:id])
end
项目/ 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%>
很抱歉,如果这不起作用,我还没有测试过。