【问题标题】:No slug being added with friendly id rails没有使用友好的 id rails 添加 slug
【发布时间】:2016-04-16 20:48:13
【问题描述】:

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

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

【问题讨论】:

  • 请使用category_item_key.rb 型号代码更新您的问题。
  • 我忘记在我的模型中添加extend FriendlyId friendly_id :name, use: :slugged

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


【解决方案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 %>

如果您已经运行了迁移(在 db 中有列),上述方法应该可以工作。如果没有,您需要发布发送的参数,以及您从服务器收到的响应。

--

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

资源的嵌套深度不得超过 1 级。

因为在到达 keys 之前,您已经获得了 guidescategories,因此您可能需要删除 categoryguide 参数:

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

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

【讨论】:

  • 变量现在不起作用,因为它们没有使用friendly.find。并感谢旁注
  • 然后把friendly_id: [[column]], use: [:slugged, :finders]放到你的模型中
  • extend FriendlyId friendly_id :name, use: :slugged 添加到我的模型中就可以了(发誓我检查过它在那里)。谢谢你的帮助。你向我展示了一种更简洁的编码方式,并阻止了我创建嵌套资源的噩梦
  • 哈哈谢谢伙计。专业提示 - 您的模型中甚至不需要它;如果你去config/initializers/friendly_id,你可以设置config.use :slugged,它适用于所有型号。因此,您将能够在您的模型中使用 friendly_id :x 并不受惩罚
  • 我将不得不用它来避免再次发生这种头痛!讨厌这样做,但您认为您可以查看我在此问题出现之前提出的其他问题。 stackoverflow.com/questions/34736173/…你似乎知道该怎么做
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    仅供参考

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

    to_params
     #for instance
      your_column + your_column
    end
    

    【讨论】:

      猜你喜欢
      • 2015-09-08
      • 2013-07-19
      • 2016-08-17
      • 2016-05-15
      • 2016-11-21
      • 1970-01-01
      • 2017-03-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多