Rails:找不到没有ID错误的图像

时间:2012-10-16 10:12:00

标签: ruby-on-rails

我有两个模型,项目和图像。在图像模型下,belongs_to:item和项目模型具有:many:images。

图像模型具有item_id属性。

在“项目”查看器下,我正在尝试显示与每个项目关联的图像。因此,例如,我想显示带有item_id 1000映射到ID为1000的Item的图像。

我找不到ID错误的图片。

查看器如下所示:

<h1>Listing items - temporary testing page</h1>

<table>
  <tr>
    <th>Brand</th>
    <th>Item title</th>
    <th>Description</th>
    <th>Image link</th>
    <th></th>
    <th></th>
    <th></th>
  </tr>

<% @items.each do |item| %>
  <tr>
    <td><%= item.brand %></td>
    <td><%= item.item_title %></td>
    <td><%= item.description %></td>
    <td><%= item.image_id %></td>
    <td><%= image_tag @findimages.small_img %></td>
    <td><%= link_to 'Show', item %></td>
    <td><%= link_to 'Edit', edit_item_path(item) %></td>
    <td><%= link_to 'Destroy', item, method: :delete, data: { confirm: 'Are you sure?' }     %></td>
  </tr>
<% end %>
</table>

<br />

<%= link_to 'New Item', new_item_path %>

项目控制器是这样的:

class ItemsController < ApplicationController
  # GET /items
  # GET /items.json
  def index
    @items = Item.all(params[:id])
    @findimages = Image.find(params[:item_id])

    respond_to do |format|
      format.html # index.html.erb
      format.json { render json: @items }
    end
  end
.
.
.

对于一个菜鸟的帮助将不胜感激!

2 个答案:

答案 0 :(得分:1)

所以似乎没有带有参数的图像[:item_id]

  1. 使用@findimages = Image.find(params [:item_id])如果params [:item_id]
  2. 在image.rb中使用validates_presence_of:item_id
  3. Item.all(params [:id]) - 错误的
    Item.find(params [:id])Item.all
  4. 您正在使用:item_id - 这是正确的。接下来,你应该使用item.rb中的has_one:image和image.rb中的belongs_to:item。所以你的代码看起来像:

    def index  
      @items = Item.all
    
  5. 并在视野中

    <td><%= image_tag item.image.small_img %></td>
    

    UPD:输入rails console并确保所有图像的item_id都为:

    Image.where(:item_id => nil)
    

    UPD2:不要将pgadmin与rails,rails一起使用 - 最好的数据库管理工具。

答案 1 :(得分:0)

更改

@findimages = Image.find(params[:item_id])

@findimages = Image.find_by_id(params[:item_id])

参考find它说明If no record can be found for all of the listed ids, then RecordNotFound will be raised.

find_by_id如果找不到给定ID

的记录,它将返回nil