用户名与现有路由冲突(FriendlyId)

时间:2017-04-04 12:55:25

标签: ruby-on-rails

我的应用的用户现在可以访问他们的个人资料(users/show.html.erb),如下所示:

domain.com/johndoe

为了实现这一点,我使用了以下代码

routes.rb中:

get '/:friendly_id', to: 'users#show', as: 'user'

user.rb:

extend FriendlyId
friendly_id :username, use: [:finders]
validates_uniqueness_of :username

users_controller.rb:

def show
    @user = User.friendly.find(params[:friendly_id])
end

问题是我的其他路由如domain.com/exploredomain.com/admin不再有效,因为路由器认为它们是用户名。只是为了澄清,"探索"和" admin"不是用户个人资料,而是他们自己的模型。

现在它会抛出这样的错误:

  

无法找到友好ID的记录:"探索"

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

此解决方案分为两部分。在短期内,您希望恢复站点的功能,并确保用户不能覆盖其他路由。

  1. 将您的friendly_id路线移至routes.rb文件的底部,在所有其他“探索”和“管理”路线下方。由于路由从上到下进行解析,因此可以使主路由优先。

  2. 其次,您需要查看FriendlyId's reserved words,以阻止用户创建阻止他们无法访问其帐户的slu ..更多信息here too

答案 1 :(得分:0)

您可以尝试在 java.lang.NullPointerException: Attempt to write to field 'int android.support.v7.widget.RecyclerView$ViewHolder.mItemViewType' on a null object reference at android.support.v7.widget.RecyclerView$Adapter.createViewHolder(RecyclerView.java:5837) at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5060) at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:4970) at android.support.v7.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:2029) at android.support.v7.widget.GridLayoutManager.layoutChunk(GridLayoutManager.java:541) at android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1377) at android.support.v7.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:578) at android.support.v7.widget.GridLayoutManager.onLayoutChildren(GridLayoutManager.java:170) at android.support.v7.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:3315) at android.support.v7.widget.RecyclerView.dispatchLayout(RecyclerView.java:3124) at android.support.v7.widget.RecyclerView.onLayout(RecyclerView.java:3568) at andr 数组的config/initializers/friendly_id.rb中添加您想要跳过的字词:

config.reserved_words

然后重启服务器。