Ruby on rails Rails显示参数中未显式声明'id'的操作

Ruby on rails Rails显示参数中未显式声明'id'的操作,ruby-on-rails,Ruby On Rails,在我的应用程序中,我有一个显示许多产品的视图。如果某个产品上有一个活动的“交易”,则会为该交易提供一个指向该交易的链接,该链接指向该交易的show操作,如下所示 <tr> <% @item.inventory_items.each do |p| %> <td><%= link_to image_tag("#{p.vendor.image_url}"), vendor_path(p.vendor) %></td>

在我的应用程序中,我有一个显示许多产品的视图。如果某个产品上有一个活动的“交易”,则会为该交易提供一个指向该交易的链接,该链接指向该交易的
show
操作,如下所示

<tr>
    <% @item.inventory_items.each do |p| %>
      <td><%= link_to image_tag("#{p.vendor.image_url}"), vendor_path(p.vendor) %></td>
      <td class="price">$<%= p.price %></td>
      <td>
        <% if Deal.where(:product_code => p.product_code, :vendor_id => p.vendor_id).exists? %>
          <%= link_to "See It!", deal_path(Deal.where(:product_code => p.product_code, :vendor_id => p.vendor_id)) %>

        <% else %>
        <% end %>
      </td>
      <td>
       ......
      </td>
</tr> 
交易展示活动:

def show
    @deal = Deal.find(params[:id])
end
试一试

p.product\u code,:vendor\u id=>p.vendor\u id).first)%%>
试试看

p.product\u code,:vendor\u id=>p.vendor\u id).first)%%>

您的代码绝对不是rails的风格

您应该能够做到以下几点:

<tr>
        <% @item.inventory_items.each do |p| %>
          <td><%= link_to image_tag("#{p.vendor.image_url}"), vendor_path(p.vendor) %></td>
          <td class="price">$<%= p.price %></td>
          <td>
            <% if p.deal.exists? %>
              <%= link_to "See It!", deal_path(:id => p.deal.id)) %>

            <% else %>
            <% end %>
          </td>
          <td>
           ......
          </td>
    </tr> 

$
p、 deal.id))%>
......
请注意,您可以在链接中传递参数。见此问题—


如果您的模型设置正确,您就不必在视图中进行查询。

您的代码肯定不太像rails

您应该能够做到以下几点:

<tr>
        <% @item.inventory_items.each do |p| %>
          <td><%= link_to image_tag("#{p.vendor.image_url}"), vendor_path(p.vendor) %></td>
          <td class="price">$<%= p.price %></td>
          <td>
            <% if p.deal.exists? %>
              <%= link_to "See It!", deal_path(:id => p.deal.id)) %>

            <% else %>
            <% end %>
          </td>
          <td>
           ......
          </td>
    </tr> 

$
p、 deal.id))%>
......
请注意,您可以在链接中传递参数。见此问题—


如果您的模型设置正确,您就不必在视图中进行查询。

这很有效,谢谢!但是为什么添加
。首先
会让神奇发生呢?你需要有一个ActiveRecord。。交易。其中(:product\u code=>p.product\u code,:vendor\u id=>p.vendor\u id)返回一个ActiveRecords数组:)每当你执行
,它都会返回一个数组。其中
,它会返回一个数组,因此你要么必须循环使用
,要么使用
。first
获取第一个。谢谢!但是为什么添加
。首先
会让神奇发生呢?你需要有一个ActiveRecord。。交易。其中(:product\u code=>p.product\u code,:vendor\u id=>p.vendor\u id)返回一个ActiveRecords数组:)每当你执行
,它都会返回一个数组。其中
,它会返回一个数组,因此你要么必须循环遍历它,要么使用
。first
获取第一个。我同意,这很理想。我没有从一开始就这样做的部分原因是因为我的关联目前的设置方式。有一些问题超出了这个问题的范围,使我至今无法这样做。也许现在是深入研究并试图解决这些问题的好时机。谢谢关联肯定会很棘手,但一旦它们设置正确,您就会真正看到rails的魅力。现在花点时间去学习它们,它将在将来对你有益。我同意这是理想的。我没有从一开始就这样做的部分原因是因为我的关联目前的设置方式。有一些问题超出了这个问题的范围,使我至今无法这样做。也许现在是深入研究并试图解决这些问题的好时机。谢谢关联肯定会很棘手,但一旦它们设置正确,您就会真正看到rails的魅力。现在花点时间去学习它们,它将在将来对你有益。
<tr>
        <% @item.inventory_items.each do |p| %>
          <td><%= link_to image_tag("#{p.vendor.image_url}"), vendor_path(p.vendor) %></td>
          <td class="price">$<%= p.price %></td>
          <td>
            <% if p.deal.exists? %>
              <%= link_to "See It!", deal_path(:id => p.deal.id)) %>

            <% else %>
            <% end %>
          </td>
          <td>
           ......
          </td>
    </tr>