这可能很容易实现,但我很难清楚地表达清楚,导致我得到各种各样的半恋人,但不是我在搜索时发布SO的帖子。
我有一个资源,我们只是使用User作为一个简单的讨论用例。我希望SEO友好的URL,所以不是〜/ users /:id,而是〜/ users /:name ,我的用户控制器上的show动作正在执行User.find_by_name(:name) 。效果很好。
在应用的各个部分,我想将最终用户重定向回我的资源。文档似乎表明我应该做
redirect_to @user, :notice => "your page is now DIAMONDS!"'
这里的问题是,这会自动显示使用资源的:id值,这不是我所追求的。我想知道是否有办法在我的路由文件中定义路由,这意味着我想要使用name属性 - 然后只需重定向到生成的route_url助手。但我对如何做到这一点感到茫然。
在此期间,我正在诉诸:
flash[:notice] = "Your account is now DIAMONDS. *fist bump*"
redirect_to :action => :show , :id => @user.name
这对我来说不太理想,因为它是一个很好的重复代码(我有很多UI元素将链接回我的资源),因为我似乎无法弄清楚如何将闪存包括在内redirect_to方法调用的一部分 - 在redirect_to中包含闪光炸弹的每一个卷曲支撑组合。
我认为这与我的问题没有特别的关系,但我在Rails 3上这样做,以防它对我可用的选项有一些影响。
对于noobishness抱歉:)
答案 0 :(得分:2)
很简单。这样做的标准方法是:
<强> /app/models/user.rb 强>
def to_param
"#{id}-#{name}"
end
这很好,并为您提供更好的搜索引擎优化 - http://yoursite.com/users/1345-supercool ....您可以稍微调整一下以删除'1345':
<强> /app/models/user.rb 强>
# add_column :permalink, :string
attr_protected :permalink
before_create :set_permalink
validates_uniqueness_of :permalink
def set_permalink
self.permalink = username.parameterize
end
def to_param
permalink
end
这将为您提供http://yoursite.com/users/supercool并且将成为永久性网址,这样,如果用户稍后更改其用户名,则网址将保持不变并保持搜索引擎满意。