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 部分。