【问题标题】:Ruby on Rails: Showing Member's Name Instead of ID in Show [duplicate]Ruby on Rails:在显示中显示成员的名称而不是 ID [重复]
【发布时间】:2012-10-14 23:55:18
【问题描述】:

可能重复:
making a pretty url via ruby

我环顾四周,但找不到答案。我没有问正确的问题和/或我没有找对地方。

我定义了以下内容:

config/routes.rb
resources :members

members_controller.rb
def show
@member = Member.find(params[:id])
end

目前显示会员时,网址为http://myapp.tld/members/1。假设成员的名字是cooldude。如果可能的话,显示http://myapp.tld/members/cooldude 甚至http://myapp.tld/cooldude 有多难?

感谢您的帮助。

【问题讨论】:

    标签: ruby-on-rails model-view-controller routes ruby-on-rails-3.2 custom-url


    【解决方案1】:

    我推荐friendly_id,但如果您想推出自己的解决方案,这应该可以帮助您开始:

    1. slug 字段添加到您的模型中
    2. 保存前设置slug字段
    3. 覆盖模型中的to_param 以返回slug 而不是id

    设置您的模型:

    # member.rb
    before_save do
      self.slug = name.parameterize
    end
    
    def to_param
      slug
    end
    

    将您的取景器更改为:

    # members_controller.rb
    def show
      @member = Member.find_by_name!(params[:id])
    end
    

    请注意find_by_name!(看到爆炸了吗?)将引发ActiveRecord::RecordNotFound 异常,而不是返回nil。在生产中,这将自动显示 404 页面。

    在您看来,您可以使用member_path(@member),它现在将返回/members/cool-dude,而不是/members/1

    查看文档:

    【讨论】:

    • 谢谢老兄,很有帮助!这正是我所需要的。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-03
    • 1970-01-01
    • 2021-08-26
    • 1970-01-01
    相关资源
    最近更新 更多