在我的应用程序中,我有List对象和问题对象,列表由问题组成,问题可能属于许多列表。我在两个类上都使用HABTM,并且我已经创建了它们的连接表:
class AddTableListsProblems < ActiveRecord::Migration
def up
create_table :lists_problems, :id => false do |t|
t.references :list
t.references :problem
t.timestamps
end
end
def down
drop_table :lists_problems
end
end
现在,在我列表的show视图中,我打算显示所有问题的列表,并提供一个“link_to”将此问题添加到正在显示的当前List中,但我似乎无法弄清楚如何。我是RoR的新手,所以解决方案可能很简单,虽然我似乎无法解决它。
这是我目前的代码。
<% @problems.each do |problem| %>
<%= render problem %>
| <%= link_to "Add to current list", <How do I access the List.problems method to add the problem and create a relation?> %>
<% end %>
提前感谢您的帮助。
答案 0 :(得分:1)
假设你有ListController
。您将向其添加add_problem
操作。
def add_problem
list = List.find(params[:id])
problem = Problem.find(params[:problem_id])
list.problems << problem # This appends and saves the problem you selected
redirect_to some_route # change this to whatever route you like
end
你需要为此创建一条新路线。假设你正在使用资源丰富的路线,你可能会有像
这样的东西resources :list do
member do
put "add-problem/:problem_id", action: :add_problem, as: :add_problem
end
end
这将生成以下路线
add_problem_list PUT /list/:id/add-problem/:problem_id(.:format) list#add_problem
在您看来,您将更改link_to
<% @problems.each do |problem| %>
<%= render problem %>
| <%= link_to "Add to current list", add_problem_list_path(list: @list, problem_id: problem.id), method: :put %>
<% end %>
注意这只是一个例子;你想在add_problem
方法中进行授权/验证/等等。
答案 1 :(得分:0)
查看an example in the rails source,您似乎只需要创建一个新的Problem
并将其添加到List.problems
数组,然后保存/更新List
。