【发布时间】:2017-12-27 01:06:17
【问题描述】:
我有使用 Cocoon gem 的结构,在我的 app/views/order/_form.html.erb 中,下面的代码可以正常工作:
<%= f.collection_select(:drink_id, @drinks, :id, :name, :prompt => "Select a drink") %>
但是当我在 _drink_fields.html.erb 中使用时不起作用,返回这个:
#Drink:0x007fd30f9799f8 的未定义方法 `drink_id'
app/views/orders/_drink_fields.html.erb
<div class='nested-fields'>
<div class="field">
<%= f.collection_select(:drink_id, @drinks, :id, :name, prompt: 'Select a drink') %>
</div>
<%= link_to_remove_association "remove", f %>
</div>
app/views/orders/_form.html.erb
<hr>
<h3>Drinks</h3>
<div id='drinks'>
<%= f.fields_for :drinks do |drink| %>
<%= render 'drink_fields', :f => drink %>
<% end %>
<div class='links'>
<%= link_to_add_association 'add', f, :drinks %>
</div>
</div>
<hr>
app/views/models/order.rb
class Order < ApplicationRecord
belongs_to :drink, optional: true
has_many :drinks
accepts_nested_attributes_for :drinks, allow_destroy: true
end
app/controllers/orders_controller.rb
def set_order
@order = Order.find(params[:id])
end
def set_drink
@drinks = Drink.all
end
# Never trust parameters from the scary internet, only allow the white list through.
def order_params
params.require(:order).permit(:number, :drink_id, drinks_attributes: [:id, :name, :_destroy])
end
为什么我收到了它? 怎么做才好?
谢谢大家!!
【问题讨论】:
-
你能分享你整个表单的相关代码吗?这将帮助我们给你一个答案。到目前为止,您尝试过什么?
-
f中是什么对象以及该对象如何与drink关联? -
如果没有更多上下文,这是不可能回答的。请出示完整的表格并解释关联:为什么茧会在此标记。如果我猜的话:你有
has_many :drinks的东西,从错误中我们可以推断出Drink没有drink_id,但是@drinks变量和集合选择没有意义,请显示我们更多能够为您提供帮助。 -
伙计们,我使用了相同的参考 => github.com/nathanvda/cocoon,使用订单而不是项目,使用饮料而不是任务。
-
啊,你如何渲染表单?我怀疑@drinks 变量无法识别参考这个stackoverflow.com/questions/16242121/…