2011-10-23 8 views
0

私は、レール2.3.5のアプリケーションを実行し、コントローラ#showのNil:Nilclassを取得しています。Rails 2.3.5 nilに対して未定義のメソッドto_symを取得する:NilClass

これは私のshowアクション

def show 
@category = Category.find_by_url_name(params[:id]) 
     @brands = @category.brands 
     @categories = Category.find(:all) 
     @meta_title = "#{@category.name}" 

respond_to do |format| 
    format.html 
      @brand = @brands.first  
      @search = Product.search.order(params[:order] || 'descend_by_date') 

      @products = @search.paginate(:conditions => { :category_id => @category, :brand_id => @brand }, :page => params[:page])  
      render :template => 'brands/show' 

    format.xml { render :xml => @category } 
end 
end 

ブラウザのトレース情報である:それは、ライン25はrespond_toがそうである、showアクションライン25と28を指す

/Users/tjs/.rvm/gems/ruby-1.8.7-p352/gems/activesupport-2.3.5/lib/active_support/whiny_nil.rb:52:in `method_missing' 
    /Users/tjs/.rvm/gems/ruby-1.8.7-p352/gems/searchlogic-2.5.8/lib/searchlogic/active_record/named_scope_tools.rb:16:in `named_scope_options' 
    /Users/tjs/.rvm/gems/ruby-1.8.7-p352/gems/searchlogic-  2.5.8/lib/searchlogic/named_scopes/alias_scope.rb:54:in `named_scope_options' 
    /Users/tjs/.rvm/gems/ruby-1.8.7-p352/gems/searchlogic-2.5.8/lib/searchlogic/named_scopes/or_conditions.rb:14:in `named_scope_options' 
    /Users/tjs/.rvm/gems/ruby-1.8.7-p352/gems/searchlogic-2.5.8/lib/searchlogic/search/scopes.rb:15:in `scope_options' 
    /Users/tjs/.rvm/gems/ruby-1.8.7-p352/gems/searchlogic-2.5.8/lib/searchlogic/search/method_missing.rb:80:in `cast_type' 
/Users/tjs/.rvm/gems/ruby-1.8.7-p352/gems/searchlogic-2.5.8/lib/searchlogic/search/method_missing.rb:22:in `method_missing' 
/Users/tjs/.rvm/gems/ruby-1.8.7-p352/gems/searchlogic-2.5.8/lib/searchlogic/search/method_missing.rb:36:in `send' 
/Users/tjs/.rvm/gems/ruby-1.8.7-p352/gems/searchlogic-2.5.8/lib/searchlogic/search/method_missing.rb:36:in `method_missing' 
/Users/tjs/Sites/emeraldcg/app/controllers/categories_controller.rb:28:in `show' 
/Users/tjs/Sites/emeraldcg/app/controllers/categories_controller.rb:25:in `show' 

|形式|製品ライン -

ライン28は@searchです。

いただきまし奇妙私はカテゴリにURLを編集するために行けばということである:/カテゴリ/アンペアが/編集には、以下を返します:

ActiveRecord::RecordNotFound in CategoriesController#edit 

Couldn't find Category with ID=amps 
RAILS_ROOT: /Users/tjs/Sites/emeraldcg 

Application Trace | Framework Trace | Full Trace 
/Users/tjs/.rvm/gems/ruby-1.8.7-p352/gems/activerecord-2.3.5/lib/active_record/base.rb:1586:in `find_one' 
/Users/tjs/.rvm/gems/ruby-1.8.7-p352/gems/activerecord-2.3.5/lib/active_record/base.rb:1569:in `find_from_ids' 
/Users/tjs/.rvm/gems/ruby-1.8.7-p352/gems/activerecord-2.3.5/lib/active_record/base.rb:616:in `find' 
/Users/tjs/Sites/emeraldcg/app/controllers/categories_controller.rb:50:in `edit' 

私のカテゴリーのモデル:このアプリはうまく働いた

class Category < ActiveRecord::Base 
    has_many :brands, :through => :products, :uniq => true 
    has_many :products 
# acts_as_friendly_param :name 

validates_presence_of :url_name 
validates_uniqueness_of :url_name 

def to_param 
    self.url_name 
end 
end 

レール3の前に...とてもイライラして、私は新しいレールデベロッパーなので、戻ってレール2のプロジェクトを使用する方法を見つけようとしています。

答えて

0

は、「IDとカテゴリーが見つかりませんでした=アンペアは、」IDを使用してレコードを検索しようとするクエリの結果です。 例:

User.find('amps') 
will be converted into 
SELECT * FROM users WHERE id='amps'; 

カテゴリを見つけるために右のコードを使用していることを確認してください。

+0

ユーザーが関与していない)... @category = Category.find_by_url_name(paramsは[:ID])メソッド validates_presence_ofあるURL_NAMEによってカテゴリを見つけることです。 url_name validates_uniqueness_of:url_name def to_param self.url_name end –

+0

ここでは例としてUserを指定しています。レールコンベンションでは、安らかなリソース/カテゴリ/アンプ/編集は/ categories /:id/editにマッピングされます。ですから、あなたはCategory.find(params [:id])を編集アクションやどこかで使用していると思われます。 – nkm

+0

ああ、[OK]を、私は私はあなたが...ユーザーの混乱のために申し訳ありませんが言っているものを手に入れると思います。私のカテゴリテーブルには、管理者がdef to_param self.url_name endメソッドが動作し、@categoryインスタンス変数がurl_nameから引き出されている、クリーンなURL構造を作成できるurl_nameフィールドがあります。助けて。私はまだそれを完全に取得していないが、あなたたちは正しいdirで私を指しています。 –

0

@nkmが指摘したように、あなたのアプリが「アンペア」

カテゴリとして設定しているかどうかを確認するためにあなたのショーのURLをチェックして、あなたのroutes.rbをファイルをチェック呼ばれるIDからカテゴリを検索しようとしているとき、このエラーが発生しましたリソース

HTH

sameera

1

あなたはいつも@category = Category.find(:first, :conditions => ["url_name = ?", params[:id]])@category = Category.find_by_url_name(params[:id])を置き換えることができます。 3.1レールにスイッチング

がさらに良くなる。

関連する問題