1

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

到目前为止我所拥有的:

Aproject 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 tablewords表。

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

那么如何获取project_id并填充连接表并使用find_or_create_by填充words表。

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

谢谢

4

2 回答 2

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”

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

@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
于 2013-10-04T14:01:52.967 回答
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%>

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

于 2013-10-04T11:19:28.130 回答