2016-10-24 3 views
0

にネストされたフォームをレンダリングするために、私は2つのモデルがあります。私は、テーブルを表示するレール:方法の例については、表

class Task < ApplicationRecord 
    has_many :task_details 
end 

class TaskDetail < ApplicationRecord 
    belong_to :task 
end 

を、テーブル内の各行が1 TaskDetailであり、ユーザ入力を可能にします。そのユーザーが送信すると、すべてのデータがサーバーに送られます。ここに私のコードは次のとおりです。 (なお:私はビューのためにいくつかの情報をハッシュを返すようにしたいので、私@data[:task]は、タスクオブジェクトである)

<%= form_for @data[:task], :url => tasks_path do |f| %> 
    <table> ... </table> 
<% end %> 

私の質問は:どのように私は私の要件として行うことができます。

おかげ

答えて

3

は...

<%= form_for @data[:task], :url => tasks_path do |f| %> 
    <table> 
    <tr> 
     <th>Task Name</th> 
     <th>Task Description</th> 
    <tr> 
    <%= f.fields_for :task_details do |task_detail| %> 
     <tr> 
     <%= task_detail.hidden_field :id %> 
     <td><%= task_detail.text_field :name %></td> 
     <td><%= task_detail.text_field :description %> </td> 
     <tr> 
    <% end %> 
    </table>  
<% end %> 

:idための隠しフィールドを使用することをお使いのTaskモデルがaccepts_nested_attributes_for :task_detailsを持っていることを確認した後、あなたのような何かを行うことができます...あなたが必要とするようにレールは、既存のタスクと入力する新しいタスクを区別することができます。あなたが詳細に入力する

def new 
    ... 
    @data[:task].task_details.build 
    ... 
end 
+0

感謝を形に空行を提供するために、少なくとも1つのnewタスクの詳細がありますことを確認する必要があり、あなたのnew方法で

。それぞれ ''に1つのループがあります。だから、すでに知られているインデックスを使って 'field_for'を一度だけ実行させるにはどうすればいいですか? –

+0

あなたが何を求めているのか分かりません。あなたの 'Task'オブジェクトは' TaskDetail'オブジェクトを1つしか持たないと言っていますか?ループは1回だけ表示されます。 多くの種類のタスクの詳細を表示することについて話していますが、ユーザーがタスクの詳細を選択していますか? – SteveTurczyn

+0

あなたは達成しようとしていることを例で明確に説明する必要があります。 – SteveTurczyn

関連する問題