所以把头发拉了一个小时后,我决定在这里张贴。我收到这个错误:
NoMethodError in Articles#show
Showing /home/leon/sites/VIS/app/views/articles/_article.html.erb where line #3 raised:
undefined method `user_path' for #<#<Class:0x7fdd81fe1eb8>:0x7fdd81fdfdc0>
Extracted source (around line #3):
1: <div id="left-column">
2: <p class="label-b">Author<br>
3: <%= link_to "#{@article.user.penname}'s profile", user_path(article.user) %>
user_path(article.user)%&gt;
当我尝试链接到文章的创作用户时。我的路线档案:
resources :tags
get "admin/index"
get "admin/show"
get "articles/contact"
get "articles/about"
resources :roles
devise_for :users, :controllers => { :registrations => "users/registrations" }
resources :articles do
resources :comments
end
我的文章模型文件中有belongs_to:user,我的用户模型文件中有一个has_many:文章。我正在使用此链接链接到文章中作者的个人资料。
请帮忙!我正在使用可以为我的权限管理和设计我的身份验证,但它在文章的show动作中抛出错误,所以我没有发布该代码。如果我应该告诉我。谢谢!
@Jacob
我得到同样的错误:
文章中的NoMethodError#show
显示/home/leon/sites/VIS/app/views/articles/_article.html.erb第3行:
#&lt;#:0x7fdd82217a98&gt;的未定义方法`user_path' 提取的来源(第3行):
1:
2:作者
3:&lt;%= link_to“#{@article.user.penname}的个人资料”,article.user%&gt;
4:先前版本
5:版本7
我路线的相关部分:
{:action=>"destroy", :controller=>"roles"}
new_user_session GET /users/sign_in(.:format) {:action=>"new", :controller=>"devise/sessions"}
user_session POST /users/sign_in(.:format) {:action=>"create", :controller=>"devise/sessions"}
destroy_user_session GET /users/sign_out(.:format) {:action=>"destroy", :controller=>"devise/sessions"}
user_password POST /users/password(.:format) {:action=>"create", :controller=>"devise/passwords"}
new_user_password GET /users/password/new(.:format) {:action=>"new", :controller=>"devise/passwords"}
edit_user_password GET /users/password/edit(.:format) {:action=>"edit", :controller=>"devise/passwords"}
user_password PUT /users/password(.:format) {:action=>"update", :controller=>"devise/passwords"}
user_registration POST /users(.:format) {:action=>"create", :controller=>"users/registrations"}
new_user_registration GET /users/sign_up(.:format) {:action=>"new", :controller=>"users/registrations"}
edit_user_registration GET /users/edit(.:format) {:action=>"edit", :controller=>"users/registrations"}
user_registration PUT /users(.:format) {:action=>"update", :controller=>"users/registrations"}
user_registration DELETE /users(.:format) {:action=>"destroy", :controller=>"users/registrations"}
user_confirmation POST /users/confirmation(.:format) {:action=>"create", :controller=>"devise/confirmations"}
new_user_confirmation GET /users/confirmation/new(.:format) {:action=>"new", :controller=>"devise/confirmations"}
user_confirmation GET /users/confirmation(.:format) {:action=>"show", :controller=>"devise/confirmations"}
啊哈!它没有用户#show的路由,但我不确定为什么我有:
class UsersController < ApplicationController
...
def show
respond_to do |format|
format.json { render :json => @user }
format.xml { render :xml => @user }
format.html
end
rescue ActiveRecord::RecordNotFound
respond_to_not_found(:json, :xml, :html)
end
在我的app / controllers文件夹中。我是否需要将用户控制器移动到app / controllers / devise并使用devise而不是应用程序控制器将其重载?
答案 0 :(得分:1)
你可以这样做:
<%= link_to "#{@article.user.penname}'s profile", article.user %>
Rails会自动确定路线。
如下所示:
http://api.rubyonrails.org/classes/ActionView/Helpers/UrlHelper.html#method-i-link_to
<强>更新强>
是的,您将不得不继承DeviseController而不是ApplicationController。在这里,您可以添加自己的自定义操作,例如show(这就是您现在正在做的事情)。
请注意:https://github.com/plataformatec/devise
并搜索:配置控制器
答案 1 :(得分:0)
尝试使用article.user
代替user_path(article.user)
。如果这不起作用,您可以发布rake routes
的输出吗?
答案 2 :(得分:0)
我明白了。在玩了一段时间的路线并阅读rails文档后,我将此行添加到我的路线文件中:
devise_for:users,:controllers =&gt; {:registrations =&gt; “用户/注册”}
资源:users,:only =&gt; [:index,:show]&lt; ==此行
低于我的devise_for路线。这允许我显示用户配置文件,而不必担心设计提供的编辑更新等角色。无论如何,谢谢你的回答,我很感激!
答案 3 :(得分:0)
不应该只是:@article.user
而不是article.user
??
<%= link_to "#{@article.user.penname}'s profile", @article.user %>
为什么要为用户penname使用实例变量,为用户对象使用局部变量?我认为这是你的问题。