Ruby on rails Rails友好的\u id gem用于漂亮的url
是否有一种方法可以使友好的\u id动态化,如下面所示,以便根据我的用户模型(下一种\u语言)中的属性调整url的外观。我用的是Desive。理想情况下,我希望控制器能够处理这种逻辑,但却想不出怎么做。下面的错误是因为lang模型不知道当前用户 朗模式: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
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中。Devices
当前用户方法仅限于在控制器、帮助程序和视图中可用。如果要在模型中使用当前用户,则必须将值传递到模型中。因此,您还需要模型中的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