轨。表单提交包含嵌套模型,来自模型控制器的调用方法

时间:2013-06-19 00:18:17

标签: ruby-on-rails ruby ruby-on-rails-3

我有一个Class Foo有很多Bar(s)

我有一个包含嵌套类Bar的表单,当表单提交时我想要Bar 构建为具有与服务器关联的IP地址。 我的问题是我不知道如何在创建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 %>

1 个答案:

答案 0 :(得分:1)

你能试试吗?

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

说明:当您有嵌套属性时,您可以创建Foo和一个或多个Bars(一对多关系)。在你的情况下,你只制作一个Bar,但这不会改变你在多个关系中拥有一个的事实,你只需要一个条形元素。所以,你把bars [0]放在第一个也是唯一的bar数组元素(ActiveRecord :: Relation)。