我有一个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 %>
答案 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)。