我正在尝试将这些模型与 创建栏操作相关联。
我知道bar和type都是没有创建的nil对象,但为什么,ruby不明白我想要的只是绑定这些nil对象?
所以,我搜索了答案,但没有一个人清楚地解释了为什么会出现这个错误:调用id为nil,这将错误地为4 - 如果你真的想要id为nil,请使用object_id
发生在这种情况下。
用户 - 模型
has_one :bar
栏 - 模型
belongs_to :type
belongs_to :user
类型 - 型号
has_many :bars
栏 - 控制器
def new
@bar = Bar.new
end
def create
@bar = current_user.build_bar(params[:bar].merge(:type_id => @type.id))
if @bar.save
flash.now[:success] = "Wohoo!"
redirect_to @bar
else
render :new
end
end
New_bar - 查看
<div class="block">
<%= render 'shared/flash_messages' %>
<%= form_for @bar, :url => bars_path, :method => :post do |b| %>
<ul>
<li><%= b.label :name %><%= b.text_field :name %></li>
<%= b.fields_for :type do |t| %>
<li>pirate:<%= t.radio_button :style, "pirate" %></li>
<li>pub:<%= t.radio_button :style, "pub" %></li>
<li>american:<%= t.radio_button :style, "american" %></li>
</ul>
<% end %>
<%= b.submit "create", :class => "sec button" %>
<% end %>
</div>
答案 0 :(得分:1)
尝试构建这样的bar
对象:
@bar = current_user.bar.new params[:bar].merge(:type_id => @type.id)
确保在拨打该线路时同时拥有current_user
对象和@type
对象。
对于记录,current_user.bar.new
和current_user.bar.build
之间的唯一区别是build
在保存之前将新创建的bar
对象添加到用户的集合中(其中为{在实际保存之前,{1}}不会将对象添加到用户。