【发布时间】:2012-03-10 22:07:57
【问题描述】:
我正在尝试将这些模型与 create bar action 相关联。
我知道 bar 和 type 都是尚未创建的 nil 对象,但是为什么,ruby 不明白我想要的只是绑定这些 nil 对象?
所以,我搜索了答案,但没有一个人清楚地解释为什么会出现这个错误:Called id for nil,这会错误地是 4 -- 如果你真的想要 nil 的 id,请使用 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>
【问题讨论】:
-
顺便说一句,您可能不想使用“类型”作为模型名称。见,例如juicebar.wordpress.com/2007/05/30/reserved-words-in-rails
-
哇!万万没想到,满大街都是隐藏的花招啊!
标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-3.1 rubygems