0

クラス Foo には多くのバーがあります

ネストされたクラス Bar を含むフォームがあり、フォームが送信されたときに、サーバーから関連付けられた IP アドレスを持つように構築された Bar が必要です。私の問題は、Foo が作成されたときに、params を介してメソッドを呼び出して Bar に IP を設定する方法がわからないことです。

Foo コントローラーで

def new
 @foo = Foo.new
 @foo.bars.build
end

def create
  @foo.Foo.create(params[:foo])
  if @foo save 
     #error code
     #b = Bar.find(params[:bar_id])
     # b.setIP request.remote_ip
  end
end

<%= form_for @foo do |f| %>
    <%= f.label "Comment : " %>
    <%= f.fields_for :bars do |comment_form| %>
        <%= comment_form.text_area :comment %>
        <%= f.label "Terms of Service" %>
        <%= comment_form.check_box :terms %>

        <% end %>
<%= f.submit "Submit"%>

<% end %>
4

1 に答える 1

1

これを試すことができますか?

def create
  @foo = Foo.new(params[:foo])
  @foo.bars[0] = request.remote_ip
  if @foo save 
     #it's ok
  end
end

説明: ネストされた属性がある場合、Foo と 1 つ以上のバー (1 対多の関係) を作成します。あなたの場合、バーを 1 つだけ作成しますが、1 対多の関係があるという事実は変わりません。バーには 1 つの要素しかありません。したがって、bars[0] を入れて、bars 配列 (ActiveRecord::Relation) の最初で唯一の要素にアクセスします。

于 2013-06-19T00:31:58.427 に答える