没有添加友好id轨道的slug

时间:2016-01-12 09:48:59

标签: ruby-on-rails ruby-on-rails-4 rubygems friendly-id

当我在db中创建一个新的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,出了点问题。

也许我错过了什么。但是我找不到问题。

3 个答案:

答案 0 :(得分:1)

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 %>

如果您已经运行了迁移(在数据库中有列),则上述操作应该可行。如果没有,则需要发送已发送的参数以及您从服务器接收的响应。

-

顺便说一句,你也想要look at how many levels you're nesting你的路线......

  

资源不应该嵌套超过1级。

因为您在到达guides之前已经categories然后keys,所以您可能希望删除categoryguide参数:

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

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

仅供您注意

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

to_params
 #for instance
  your_column + your_column
end