【问题标题】:How to get friendly_id gem get working with Rails 5.0.0.rc1?如何让 friendly_id gem 使用 Rails 5.0.0.rc1?
【发布时间】:2016-10-06 21:16:34
【问题描述】:

我在我的 rails 应用程序中使用了friendly_id。我在 gemfile 中有以下内容。

gem 'friendly_id', '~> 5.1'

每当我访问用户个人资料时都会收到 404 错误。

suai@rails-tutorial:~/workspace/iya (master) $ rails server -b $IP -p $PORT
=> Booting WEBrick
=> Rails 5.0.0.rc1 application starting in development on http://0.0.0.0:8080
=> Run `rails server -h` for more startup options
[2016-06-07 05:54:21] INFO  WEBrick 1.3.1
[2016-06-07 05:54:21] INFO  ruby 2.3.1 (2016-04-26) [x86_64-linux]
[2016-06-07 05:54:21] INFO  WEBrick::HTTPServer#start: pid=74846 port=8080
Started GET "/users/testtest" for 98.5.56.144 at 2016-06-07 05:54:25 +0000
Cannot render console from 98.5.56.144! Allowed networks: 127.0.0.1, ::1, 127.0.0.0/127.255.255.255
  ActiveRecord::SchemaMigration Load (0.2ms)  SELECT "schema_migrations".* FROM "schema_migrations"
Processing by UsersController#show as HTML
  Parameters: {"id"=>"testtest"}
  User Load (0.4ms)  SELECT  "users".* FROM "users" WHERE "users"."id" = ? LIMIT ?  [["id", 0], ["LIMIT", 1]]
  Rendering public/404.html within layouts/application
  Rendered public/404.html within layouts/application (8.5ms)
  Rendered layouts/_shim.html.erb (0.8ms)
  Rendered layouts/_header.html.erb (2.3ms)
  Rendered layouts/_footer.html.erb (2.2ms)
Completed 404 Not Found in 924ms (Views: 848.5ms | ActiveRecord: 2.1ms)

用户控制器,显示方法

  def show
    @user = User.find(params[:id])
    @microposts = @user.microposts.paginate(page: params[:page])
    respond_to do |format|
      format.html
      format.js    
    end      
  end

用户.rb

  extend FriendlyId
  friendly_id :name, use: [:slugged, :finders]   

我认为friendly_id 不起作用。
知道如何解决这个问题吗?谢谢

【问题讨论】:

  • 您能否发布传递给您的方法的参数。您在 Rails 服务器控制台中遇到的错误是什么?
  • 好的,可以把你的 users#show 方法的内容贴出来吗?

标签: ruby-on-rails friendly-id ruby-on-rails-5


【解决方案1】:

当你想使用时……

extend FriendlyId
friendly_id :name, use: [:slugged, :finders] 

...你需要安装master分支(friendly_id 5.2.0.beta.1)

gem 'friendly_id', github: 'norman/friendly_id'

如果这样做,您不必更改控制器 (Model.friendly.find)

【讨论】:

    【解决方案2】:

    更新到 5.2.1 解决。

    gem 'friendly_id', '~> 5.2.1'
    

    【讨论】:

    • 没用
    • @bmalets 你解决了吗?为何如此?我遇到了这种行为,我在5.2.5
    • 我使用了第一个答案中的建议(friendly 范围的模型)
    【解决方案3】:

    我相信您需要做的是用户 Model.friendly.find 而不是 find

    def show
      @user = User.friendly.find(params[:id])
      @microposts = @user.microposts.paginate(page: params[:page])
      respond_to do |format|
        format.html
        format.js    
      end      
    end
    

    我希望你已经用FriendlyId 扩展了你的模型。让我知道它是否有效。

    【讨论】:

    • 嘿,它有效。谢谢你。但我有这个“friendly_id :name, use: [:slugged, :finders]”。应该是 "friendly_id :foo, use: :slugged" 吗?
    • 抱歉回复晚了。不,它只是一个例子。你的很好。
    • 谢谢。但是如果我有“friendly_id :foo, use: [:slugged, :finders]”,这个“User.find(params[:id])”应该可以正常工作吗?只有当我有这个“friendly_id :foo, use: :slugged”时,我才应该使用“User.friendly.find(params[:id])”,对吗?根据github.com/norman/friendly_id
    • 正确。使用friendly_id :name, use: :slugged。您应该可以通过User.friendly.find(params[:id]) 找到
    • 谢谢。那么,“friendly_id :foo, use: [:slugged, :finders]” 不适用于 Rails 5.0.0.rc1?
    猜你喜欢
    • 2014-09-14
    • 2013-01-17
    • 1970-01-01
    • 2017-04-10
    • 2014-10-22
    • 1970-01-01
    • 2013-07-31
    • 2015-12-27
    相关资源
    最近更新 更多