0

私は3層モデルを持っています:

ユーザー has_many が has_many に尋ねる 結果

ホームページで、ユーザーが質問に完了のマークを付けたときに結果を追加できるようにしたいと考えています。ネストされたフォームを使用して、完了フラグと完了日も更新する質問フォームに結果の説明を表示しようとしています。

SOに関する他のユーザー/質問と同様に、ネストされたフォームを画面に表示できません。他の質問の指示に従いましたが、ネストされたフィールドは表示されません。誰かが以下のコードで問題を見つけられるかどうか疑問に思っていますか?

モデルに聞く

class Ask < ActiveRecord::Base

  attr_accessible   :category, :description, :done, :followed_up, 
                    :helper, :public, :date_done, :date_followed_up, :user_id, :outcomes_attributes
  belongs_to :user, counter_cache: true
  has_many :outcomes
  accepts_nested_attributes_for :outcomes

end

コントローラに尋ねる

class AsksController < ApplicationController

  def new
    @ask = current_user.asks.build(params[:ask])
    @ask.outcomes.build
  end

  def create
    @ask = current_user.asks.build(params[:ask])
    if @ask.save!
      respond_to do |format|
        format.html { redirect_to edit_ask_path(@ask) }
        format.js
      end
    else
      flash[:error] = "Something is wrong. The Ask was not saved..."
    end
  end

  def edit
    @ask = current_user.asks.find(params[:id])
  end

  def update
    @ask = current_user.asks.find(params[:id])
    @ask.outcomes.build
    @ask.update_attributes(params[:ask])
    respond_to do |format|
      format.html { redirect_to edit_ask_path(@ask) }
      format.js
    end
  end
end

ホームページコントローラー (このフォームはホームページにあります)

class StaticPagesController < ApplicationController

  def home
    if signed_in?
      @ask = current_user.asks.build(params[:ask])
      @ask.outcomes.build
    end
  end

ホームページにレンダリングされたフォーム部分

<% if current_user.asks.any? %>
  <ul id="ask-list-items">
    <% current_user.asks.where(done: false).each do |a| %> 
          <%= form_for(a) do |f| %>
            <li><%= a.description %></li>
            <%= f.hidden_field :date_done, value: Date.today %>
            <%= f.hidden_field :done, :value=>true %>
            <%= f.submit "Mark as done", class: "btn btn-small hidden done_btn", id: "a-#{a.id}-done" %>

            <%= f.fields_for :outcomes do |builder| %> # << These fields are not showing up
              <%= builder.text_area :description, placeholder: "Describe the outcome...", id: "ask-message" %>
            <% end %>
            <%= f.submit "Save outcome", class: "btn btn-primary" %>
          <% end %>
    <% end %>
  </ul>
<% end %>
4

1 に答える 1

3

でシンボルを使用するform_forと、fields_forRails は同じ名前のインスタンス変数を使用しようとし@outcomesます:outcomes。だから試してみてください(既存の結果の場合):

<% @outcomes = a.outcomes %>

の行の前にf.fields_for :outcomes...

そして、新しい成果のために:

<% @outcomes = a.outcomes.build %>

(質問の所有者への投稿のある最後)

于 2012-11-26T23:09:47.883 に答える