0

レールに不慣れで、1対多の関係を稼働させようとしています。モデルとコントローラーで動作していますが、ビューで起動して実行するのに問題があります。

class Project < ActiveRecord::Base
  has_many :non_labor_expenses
end

class NonLaborExpense < ActiveRecord::Base
  belongs_to :project
end

コントローラに@non_labor_expensesをロードして(編集アクション)、non_labor_expenseテーブルにいくつかのエントリを手動で作成し、次のようにプロジェクトビューで既存のデータをプルできます。

<% unless @non_labor_expenses.nil? %>
  <% count = 1 %>
  <% for expense in @non_labor_expenses %>
    <li>
      <div class="label"><%= f.label :expense , "Expense" + count.to_s %></div>
      <%= '$' + expense.amount.to_s + ' - ' + expense.description.to_s %>

    </li>
  <% count = count +1 %>
  <% end %>

私が問題を抱えているのは、プロジェクトに新しいnon_labor_expenseエントリを追加することです。バックエンドでの処理を管理できるはずですが、フィールドをフォームに表示することすらできません。

これが私が今いるところです:

<li class="editable">
  <div class="label"><%= f.label :non_labor_expenses %></div>
  <%= f.text_field :non_labor_expenses %>
</li>

上記のコードはこのようには見えませんが、理想的にはフォームフィールドは次のようになります。

Expense Amount [text input]
Expense Description [text input]

私の完全なフォームコードはここにあります:http://pastebin.com/m2b280b0f

4

4 に答える 4

2

フォームごとに1つしか追加できないと仮定すると(JSが[n]の新しい非人件費を追加するのではなく)、コントローラーに空のインスタンス変数を作成するだけです。

@new_non_labor_expense = NonLaborExpense.new

フォームで、次を使用して作成します。

<%= f.text_field :new_non_labor_expense, :amount %>

または、適切なメンバー変数とフィールドタイプが何であれ。

コントローラでは、「new_non_labor_expense」というパラメータを取得し、それにアクセスして検証し、関連付けて、保存することができます。または、これらの手順のいずれかが間違っている場合は、戻ってユーザーに通知することができます。

さらに追加する必要がある場合は、それらの配列を作成して、NLEの配列を渡します。それが理にかなっていることを願っています。

于 2009-08-18T18:31:11.960 に答える
1

別のオプションはfields_forです-これは私にとってはうまく機能しているようです。Railscasts73-75をチェックしてください。

于 2009-08-18T19:13:02.890 に答える
0

non_labor_expensesはテキストフィールドではありません。これがおそらく最大の問題です。

これを行うためのより良い方法は、新しいを作成することnon_labor_expenseであり、その作成時に、プロジェクトのID(またはIDを介した名前)を選択するためのドロップダウン選択ボックスがあります。

于 2009-08-18T17:46:12.220 に答える
0

必要なのはネストされたフォームだと思います。これは、1対多の関係でそれを行う方法の簡単な例ですRails2.3.2以降で動作します

于 2009-08-18T19:02:39.243 に答える