代码之家  ›  专栏  ›  技术社区  ›  Jerome

不处理对象数据的数组项的部分Rails

  •  0
  • Jerome  · 技术社区  · 8 年前

    以下视图

    <% @packageoffers.each do |packageoffer| %>
      <% if @packageoffers_mss.include?(packageoffer) %>
      <% elsif @availables.include?(packageoffer) %>
        <%= render 'packageoffer', collection: @packageoffers %>
    

    undefined local variable or method 'packageoffer' 当试图处理部分 _packageoffer.html.erb 在第二个塔特这样的线上:

    <% 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\u price本身就是一个数组的项目 section <% @item_price = @allotments.select{ |a| a.section_id == section.id }.first

    因此,尽管 rails documentation 我无法处理数组的项。错误在哪里?

    2 回复  |  直到 8 年前
        1
  •  2
  •   user229044    8 年前

    您使用的集合渲染不正确。

    <%= render 'packageoffer', collection: @packageoffers %>
    

    渲染单个部分,并传递 局部变量 collection @packageoffers .

    你写的这句话是对以下内容的简写:

    <%= render partial: 'packageoffer', locals: { collection: @packageoffers } %>
    

    render partial:... :

    <%= render partial: 'packageoffer', collection: @packageoffers %>
    

    也就是说,您的意图似乎是迭代集合,并有条件地呈现其中的一些项。在这种情况下,您根本不应该使用集合呈现,而应该使用 <%= render packageoffer %> 允许Rails渲染 _packageoffer

        2
  •  -1
  •   arieljuod    8 年前

    型号叫Packageoffer还是Packageoffer?我认为您的问题是Rails试图从模型名推断变量名。你能试试看有没有 packge_offer

    如果模型是PackageOffer,那么应该使用 _package_offer 作为部分名称, package_offer 作为变量名 @package_offers

    编辑:如果这是问题所在,您可以将代码与 as: :packageoffer