0

私のアプリケーションには、リストオブジェクトと問題オブジェクトがあります。リストは問題で構成されており、問題は多くのリストに属することができます。私は両方のクラスで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

今、私のリストのショービュー内に、すべての問題のリストを表示し、この問題を現在表示されているリストに追加するための「link_to」を提供するつもりですが、その方法がわかりません。私は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 %>

よろしくお願いします。

4

2 に答える 2

1

あなたが持っているとしましょうListControlleradd_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

于 2013-01-16T18:19:59.173 に答える
0

rails sourceの例を見ると、新しいものを作成して配列にProblem追加し、を保存/更新するだけでよいように見えます。List.problemsList

于 2013-01-16T18:15:39.557 に答える