如何将id传递给不同的视图

时间:2013-10-04 09:56:22

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

我有一个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 tablewords表。

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

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

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

谢谢

2 个答案:

答案 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%>

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