没有使用友好 ID rails 添加 slug

No slug being added with friendly id rails

当我在数据库中创建新的 category_item_key 时,未将 slug 添加到 slug 列。

这是我的代码

迁移文件

class AddSlugToCategoryItemKeys < ActiveRecord::Migration
   def change
    add_column :category_item_keys, :slug, :string
    add_index :category_item_keys,  :slug, unique: true
  end

end

category_item_key 控制器

def new
 @guide = Guide.friendly.find(params[:guide_id])
 @category = Category.friendly.find(params[:category_id])
 @key = Category.friendly.find(params[:category_id]).category_item_keys.new

end

def create

 @guide = Guide.friendly.find(params[:guide_id])
 @category = Category.friendly.find(params[:category_id])
 @key = Category.friendly.find(params[:category_id]).category_item_keys.new(key_params)


  if @key.save
       flash[:info] = "Key added succesfully!"
      redirect_to @guide
  else
      render 'new'
  end
end



private


def key_params
 params.require(:category_item_key).permit(:name, :slug)
end

new.html.erb

     <%= form_for([@category, @key], url: category_item_keys_create_path) do |f| %>
       <%= render 'shared/error_messages', object: f.object %>

      <%= f.label :name, "Key name" %>
      <%= f.text_field :name %>

      <%= f.submit "Next"  %>
    <% end %>

创建新指南或类别友好 ID 时效果很好,添加了 slug。但是 category_item_key 出了点问题。

也许我遗漏了什么。但是我找不到问题。

def new
   @guide    = Guide.find params[:guide_id]
   @category = Category.find params[:category_id]
   @key      = @category.category_item_keys.new
end

def create
   @guide    = Guide.find params[:guide_id]
   @category = Category.find params[:category_id]
   @key      = @category.category_item_keys.new key_params

   if @key.save
      redirect_to @guide, notice: "Key added succesfully!"
   else
      render 'new'
   end
end

private

def key_params
   params.require(:category_item_key).permit(:name)
end

--

<%= form_for [@guide, @category, @key] do |f| %>
   <%= render 'shared/error_messages', object: f.object %>

   <%= f.label :name, "Key name" %>
   <%= f.text_field :name %>

   <%= f.submit "Next"  %>
<% end %>

如果您运行 进行了迁移(数据库中有列),则以上内容应该有效。如果没有,您需要 post 发送的参数,以及您从服务器收到的响应。

--

顺便说一句,您还需要 look at how many levels you're nesting 您的路线...

Resources should never be nested more than 1 level deep.

因为在到达 keys 之前你有 guides 然后 categories,你可能想要删除 categoryguide参数:

# config/routes.rb
resources :categories do
   resources :keys
end

我认为您遇到的问题是 可能 您只是将 [@category, @key] 传递给 form_for。相反,您还需要包含 @guide

忘记将 extend FriendlyId friendly_id :name, use: :slugged 添加到我的模型中。添加后我的问题就解决了

特此通知

您可以重写模型中的 to_params 方法来生成您的 uniq slug

to_params
 #for instance
  your_column + your_column
end