我的应用的用户现在可以访问他们的个人资料(users/show.html.erb
),如下所示:
domain.com/johndoe
为了实现这一点,我使用了以下代码
get '/:friendly_id', to: 'users#show', as: 'user'
extend FriendlyId
friendly_id :username, use: [:finders]
validates_uniqueness_of :username
def show
@user = User.friendly.find(params[:friendly_id])
end
问题是我的其他路由如domain.com/explore
和domain.com/admin
不再有效,因为路由器认为它们是用户名。只是为了澄清,"探索"和" admin"不是用户个人资料,而是他们自己的模型。
现在它会抛出这样的错误:
无法找到友好ID的记录:"探索"
我该如何解决这个问题?
答案 0 :(得分:1)
此解决方案分为两部分。在短期内,您希望恢复站点的功能,并确保用户不能覆盖其他路由。
将您的friendly_id
路线移至routes.rb文件的底部,在所有其他“探索”和“管理”路线下方。由于路由从上到下进行解析,因此可以使主路由优先。
其次,您需要查看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
然后重启服务器。