Rails 部分数组项不处理对象数据
Rails partial for array item not handling object data
以下观点
<% @packageoffers.each do |packageoffer| %>
<% if @packageoffers_mss.include?(packageoffer) %>
<% elsif @availables.include?(packageoffer) %>
<%= render 'packageoffer', collection: @packageoffers %>
在尝试处理部分 _packageoffer.html.erb
时返回一个 NameError undefined local variable or method 'packageoffer'
,如第二个 taht 所示:
<% item_sale_price = @item_price.sale_price * params[:quantity].to_i %>
<% markup_price = ((item_sale_price + (packageoffer.price * @r * @q)) * (1 + (@user.markup.to_d / 100) ) ) %>
注意:@item_price 本身是数组 section
的一项,必须声明为实例变量才能将其传递 <% @item_price = @allotments.select{ |a| a.section_id == section.id }.first
因此,尽管遵循 rails documentation 指南,
我无法处理数组的项目。哪里错了?
模型是叫Packageoffer还是PackageOffer?我认为你的问题是 Rails 试图从模型名称中推断出变量的名称。有没有packge_offer
可以试试吗?
如果模型是PackageOffer,那么你应该使用_package_offer
作为部分名称,package_offer
作为变量名称,还有@package_offers
。与 Rails 约定一致。
编辑:如果这是问题所在,您可以在渲染中使用带有 as: :packageoffer
选项的代码来告诉 rails 要使用的名称
您使用的集合渲染不正确。
你的线路...
<%= render 'packageoffer', collection: @packageoffers %>
呈现单个局部变量,并传递一个名为 collection
的 局部变量 ,其值为 @packageoffers
。
您所写的行是 shorthand 用于:
<%= render partial: 'packageoffer', locals: { collection: @packageoffers } %>
如果要渲染整个集合并提供部分名称,则不能使用渲染shorthand,必须使用显式版本render partial:...
:
<%= render partial: 'packageoffer', collection: @packageoffers %>
也就是说,您的意图似乎是遍历集合,并有条件地从中呈现一些项目。在这种情况下,您根本不应该使用集合呈现,您应该只使用 <%= render packageoffer %>
来允许 Rails 呈现每个记录的单数 _packageoffer
部分。
以下观点
<% @packageoffers.each do |packageoffer| %>
<% if @packageoffers_mss.include?(packageoffer) %>
<% elsif @availables.include?(packageoffer) %>
<%= render 'packageoffer', collection: @packageoffers %>
在尝试处理部分 _packageoffer.html.erb
时返回一个 NameError undefined local variable or method 'packageoffer'
,如第二个 taht 所示:
<% item_sale_price = @item_price.sale_price * params[:quantity].to_i %>
<% markup_price = ((item_sale_price + (packageoffer.price * @r * @q)) * (1 + (@user.markup.to_d / 100) ) ) %>
注意:@item_price 本身是数组 section
的一项,必须声明为实例变量才能将其传递 <% @item_price = @allotments.select{ |a| a.section_id == section.id }.first
因此,尽管遵循 rails documentation 指南, 我无法处理数组的项目。哪里错了?
模型是叫Packageoffer还是PackageOffer?我认为你的问题是 Rails 试图从模型名称中推断出变量的名称。有没有packge_offer
可以试试吗?
如果模型是PackageOffer,那么你应该使用_package_offer
作为部分名称,package_offer
作为变量名称,还有@package_offers
。与 Rails 约定一致。
编辑:如果这是问题所在,您可以在渲染中使用带有 as: :packageoffer
选项的代码来告诉 rails 要使用的名称
您使用的集合渲染不正确。
你的线路...
<%= render 'packageoffer', collection: @packageoffers %>
呈现单个局部变量,并传递一个名为 collection
的 局部变量 ,其值为 @packageoffers
。
您所写的行是 shorthand 用于:
<%= render partial: 'packageoffer', locals: { collection: @packageoffers } %>
如果要渲染整个集合并提供部分名称,则不能使用渲染shorthand,必须使用显式版本render partial:...
:
<%= render partial: 'packageoffer', collection: @packageoffers %>
也就是说,您的意图似乎是遍历集合,并有条件地从中呈现一些项目。在这种情况下,您根本不应该使用集合呈现,您应该只使用 <%= render packageoffer %>
来允许 Rails 呈现每个记录的单数 _packageoffer
部分。