2016-07-28 16 views
1

私のブログにはカテゴリが導入されています。私はそれをカテゴリにも統合することにしました。問題は、私はここで見つかりましたが、私はちょうどそれが今私が取得するときに変なPARDがあるfriendly_id ActiveRecordエラーの原因となるナルの返信なし

class CategoriesController < ApplicationController 

    before_action :find_category, only: [:show, :update, :edit, :destroy] 

    def index 
    @categories = Category.all 
    end 

    def new 
    @category = Category.new 
    end 

    def create 
    @category = Category.new(category_params) 
    if @category.save 
     flash[:success] = "Category created" 
     redirect_to categories_path 

    else 
     render 'new' 
    end 
    end 

    def edit 

    end 

    def update 
    if @category.update(category_params) 
     flash[:success]="name was successfully updated" 
     redirect_to category_path(@category) 
    else 
     render 'edit' 
    end 
    end 

    def show 

    end 

    private 
    def category_params 
    params.require(:category).permit(:name) 
    end 

    def find_category 
    @category = Category.friendly.find(params[:id]) 
    end 

end 

を動作させることができなかった多くのソリューションを導入しようとしていますので、ご了承くださいActiveRecord::RecordNotFound in CategoriesController#showもエラーCouldn't find Category with 'id'=test-2を取得しておくとされますレールコンソールにとナメクジをアップデートしてみてください、それは以下のようにそれらを示しています

Category.find_each(&:save) 
    Category Load (0.3ms) SELECT "categories".* FROM "categories" ORDER BY "categories"."id" ASC LIMIT 1000 
    (0.1ms) begin transaction 
    Category Exists (0.1ms) SELECT 1 AS one FROM "categories" WHERE ("categories"."id" != 1) AND "categories"."slug" = ? LIMIT 1 [["slug", "sports"]] 

我々はそれは素晴らしいですが、私はスラグがに表示されます...見つからないときスラグ、スポーツ...を言う見ることができる上以下のようにゼロである:

2.3.0 :058 > c = Category.find(1) 
    Category Load (0.8ms) SELECT "categories".* FROM "categories" WHERE "categories"."id" = ? LIMIT 1 [["id", 1]] 
=> #<Category id: 1, name: "sports", created_at: "2016-07-28 15:12:13", updated_at: "2016-07-28 15:12:13", slug: nil> 

と私はまた、実際のスラグを見つけようとすることで、これを確認してみました:

2.3.0 :051 > Category.find(1).slug 
    Category Load (0.2ms) SELECT "categories".* FROM "categories" WHERE "categories"."id" = ? LIMIT 1 [["id", 1]] 
=> nil 

スラグがnilであると思われます。

、最終的には、それが関連しているだけの場合には...これはここに私のshow.html.erb

<h1 align="center"><%= "Category: " + @category.name %></h1> 
<div align = "center"> 
    <% if user_signed_in? %> 
    <div id="admin_links"> 
     <%= link_to "Edit", edit_category_path(@category) %> 
     <%= link_to "Delete", category_path(@category), method: :delete, data: {confirm: "Are you sure you want to delete?"} %> 
    </div> 
    <% end %> 

    <%= link_to "Edit Category name", edit_category_path(@category) %> 

</div> 

である私は、コンソールでCategory.first(5)を行うとcategory.rb

class Category < ActiveRecord::Base 
    extend FriendlyId 
    friendly_id :name, use: :slugged 
    has_many :category_posts 
    has_many :posts, through: :category_posts 


    def should_generate_new_friendly_id? 
    slug.blank? || name_changed? 
    end 
end 

ですこれは結果です

Category Load (0.3ms) SELECT "categories".* FROM "categories" ORDER BY "categories"."id" ASC LIMIT 5 
=> [#<Category id: 1, name: "sports", created_at: "2016-07-28 15:12:13", updated_at: "2016-07-28 15:12:13", slug: nil>, 
    #<Category id: 2, name: "Nerd", created_at: "2016-07-28 17:33:35", updated_at: "2016-07-28 17:33:35", slug: nil>, 
    #<Category id: 3, name: "testing", created_at: "2016-07-28 17:38:22", updated_at: "2016-07-28 17:39:23", slug: nil>, 
    #<Category id: 4, name: "test 2", created_at: "2016-07-28 19:10:18", updated_at: "2016-07-28 19:10:18", slug: nil>, 
    #<Category id: 5, name: "books", created_at: "2016-07-28 19:29:18", updated_at: "2016-07-28 19:29:18", slug: nil> 
+0

カテゴリモデルを投稿できますか? – emrahbasman

+0

私はモデル@emrahbasman – ORYON100

答えて

3

attr_accessor :slugがあります。これは、データベースのフィールドに使用されているセッターメソッドをオーバーライドします。つまり、slugフィールドは保存されません。

モデルからattr_accessor :slugを削除し、インスタンスを再作成してslugを再生成します。

+0

ありがとう!これはうまくいった。私はすべてのカテゴリを削除し、アクセサーを削除した後に新しいカテゴリを追加し始めました。すぐに働いた。 – ORYON100

2

friendly_idを使用する場合は、フィンその方法で死ぬ。代わりに記入されていないナメクジについて

@category = Category.find(params[:id]) 

使用

@category = Category.friendly.find(params[:id]) 

の、あなたのCategoryモデルでは、あなたがこのようなものがあることを確認してください:あなたのCategoryモデルでは、あなたを

class Category < ActiveRecord::Base 
    extend FriendlyId 
    friendly_id :name, use: :slugged 

    # ... 
end 
+0

に感謝@Nicを編集して追加しました。提案したように '@category = Category.friendly.find(params [:id])' を追加しました。残念ながらエラーはまだ発生しています – ORYON100

+0

モデルを変更した後でカテゴリを保存しましたか? –

+0

はい、私もサーバを安全に再起動しました。ここでコンソールからのエラーです、 'Processing by CategoriesController#show as HTML パラメータ:{" id "=>" books "} カテゴリーロード(0.2ms)SELECT" categories "。* FROM" categories "WHERE "カテゴリ"。 "スラグ" =? "ID" ASC LIMIT 1 [["slug"、 "books"]] 5msで404が見つかりませんでした(ActiveRecord:0。2ms) '@Nic – ORYON100

関連する問題