Ruby on rails Rails友好的\u id gem用于漂亮的url

Ruby on rails Rails友好的\u id gem用于漂亮的url,ruby-on-rails,ruby,devise,friendly-id,Ruby On Rails,Ruby,Devise,Friendly Id,是否有一种方法可以使友好的\u id动态化,如下面所示,以便根据我的用户模型(下一种\u语言)中的属性调整url的外观。我用的是Desive。理想情况下,我希望控制器能够处理这种逻辑,但却想不出怎么做。下面的错误是因为lang模型不知道当前用户 朗模式: class Lang < ActiveRecord::Base if current_user.next_language == "English" extend FriendlyId friendly_id :e

是否有一种方法可以使友好的\u id动态化,如下面所示,以便根据我的用户模型(下一种\u语言)中的属性调整url的外观。我用的是Desive。理想情况下,我希望控制器能够处理这种逻辑,但却想不出怎么做。下面的错误是因为lang模型不知道当前用户

朗模式:

class Lang < ActiveRecord::Base

   if current_user.next_language == "English"
    extend FriendlyId
    friendly_id :english
   end

   if current_user.next_language == "Spanish"
    extend FriendlyId
    friendly_id :spanish
   end

end
或英文:

http://localhost:3000/langs/be
编辑以包含控制器和视图代码:

控制器:

class StaticPagesController < ApplicationController

  def home
    if user_signed_in?
      @placemark = Lang.find(current_user.bookmark)
    end
  end
end
class StaticPagesController
相关视图代码:

<%= link_to "Continue Learning!", lang_path(@placemark), class: "btn btn-large btn-primary"%>

根据文档,这应该可以:

class Lang < ActiveRecord::Base
  extend FriendlyId
  friendly_id :determine_slug

private
  def determine_slug
    case current_user.next_language
    when 'English' then :english
    when 'Spanish' then :spanish
  end

  def current_user
    Thread.current[:current_user]
  end
end
class Lang

阅读如何将您的
当前用户
存储在
线程中。此处为current
,并注意权衡。

您是否也将
当前用户
方法添加到
Lang
?当前用户方法包含在designe中,因此我没有将其明确包含在Lang中。Device
s
当前用户方法仅限于在控制器、帮助程序和视图中可用。如果要在模型中使用当前用户,则必须将值传递到模型中。因此,您还需要模型中的
current\u user
方法,并且需要设置
Thread.current[:current\u user]
,如链接答案中所述。
class StaticPagesController < ApplicationController

  def home
    if user_signed_in?
      @placemark = Lang.find(current_user.bookmark)
    end
  end
end
<%= link_to "Continue Learning!", lang_path(@placemark), class: "btn btn-large btn-primary"%>
class Lang < ActiveRecord::Base
  extend FriendlyId
  friendly_id :determine_slug

private
  def determine_slug
    case current_user.next_language
    when 'English' then :english
    when 'Spanish' then :spanish
  end

  def current_user
    Thread.current[:current_user]
  end
end