0

好的,所以我正在重建几年前在 ROR 1 中构建的旧照片库管理应用程序,并且遇到了一些编码困难,因为我生疏了,而且显然情况已经改变。我的第一个问题是尝试调用页面时出现未定义的局部变量或方法“库”错误。我感到困惑的是我在“画廊”控制器中定义了该方法,但我想知道我是否完全遗漏了一些东西。下面是一些相关的代码片段,首先是我的 index.html.erb 页面:

<% @photos.each do |photo| %>

<div>
<%= image_tag(photo.thumb_url) %>
<%= link_to 'Show', gallery %><br/>

</div>
<% end %>
<p><%= will_paginate @photos %></p>

我的画廊控制器:

class GalleryController < ApplicationController
  skip_before_filter :authorize
  # GET /gallery
  # GET /gallery.xml
  def index
    @photos = Photo.all
    @photos = Photo.paginate :page=>params[:page], :order=>'date desc',
    :per_page => 2

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

  # GET /gallery/1
  # GET /gallery/1.xml

  def show
    @photo = Photo.find(params[:id])

    respond_to do |format|
      format.html # show.html.erb
      format.json { render :json => @photo }
    end
  end
end

我的错误:

undefined local variable or method `gallery' for #<#<Class:0x111127b38>:0x1112d5700>

我应该澄清“照片”是需要登录并包含所有字段/数据库/记录数据的管理部分。使用以下行我没有问题:

<%= link_to 'Show', photo %><br/>

这会显示正确的记录和查看页面,但在站点的管理部分(需要登录)。希望这是有道理的。

4

2 回答 2

2

我在任何地方都没有看到您定义变量gallery,这就是您的错误消息告诉您的内容:gallery在您的视图中未定义。


更新您的评论:

仅仅因为您希望照片进入画廊控制器并不意味着您可以输入“画廊”并期待结果。这是一种编程语言,其中单词具有含义,而您所做的只是引用未定义的变量。这和类似的东西,在任何版本的 Rails 中都有效。

如果你想将你的照片路由到 Gallery 控制器,你可以使用自动生成的_path助手;具体来说,gallery_path它接受“画廊”(实际上是一张照片)的 id 的参数来显示:

<%= link_to 'Show', gallery_path(photo.id) %><br/>
于 2013-02-05T04:33:35.773 回答
0

尝试将您的 link_to 方法替换为以下内容:<%= link_to 'Show', :controller => "photos", :action => :your_method, :params1 => gallery %>

然后在您的 PhotoController 中,您可以使用:@my_gallery = params[:params1]访问您的画廊项目。

有关路线的一些文档:

http://guides.rubyonrails.org/routing.html

于 2013-02-05T05:23:35.677 回答