2013-02-12 48 views
0

我越来越NoMethodError Rails中

NoMethodError in ProjectsController#edit 
undefined method `projects' for 
#<User:0x28356d8>`app/controllers/projects_controller.rb:154:in `correct_user' 

】这个params是:{"user_id"=>"1", "id"=>"1"}

projects_controller出错行是:@project = current_user.projects.find_by_id(params[:id])作为

def correct_user 
    @project = current_user.projects.find_by_id(params[:id]) 
    redirect_to show_user_path if @project.nil? 
end 

我projects_controller#编辑方法部分:

def edit 
    @project = Project.find(params[:id]) 
    @project.current_step = @project.first_step 
    @user = current_user 
end 

这是由一个按钮触发,

<%= link_to image_tag('img_blank.png'), edit_user_project_path(current_user), :class => "btn_edit_project" %> 

与HTML输出:

<a class="btn_edit_project" href="https://stackoverflow.com/users/1/projects/1/edit"><img src="/assets/img_blank.png" alt="Img_blank"></a> 

我的路由文件包含以下内容:

resources :users do 
    resources :projects 
end 

rake routes显示:

edit_user_project GET /users/:user_id/projects/:id/edit(.:format)  projects#edit 

此问题不断以不同形式呈现,但从不退出得到解决。有任何想法吗?

+0

您是否声明了用户和项目之间的关联?像你的用户模型中的'has_many:projects'? – jvnill 2013-02-12 00:53:34

+0

@jvnill - 是的。用户模型具有'has_one:project'和Project model具有'belongs_to:user'。 – Matteo 2013-02-12 01:04:34

+1

这就是错误所在。当它只有一个项目时使用'current_user.projects'。 – jvnill 2013-02-12 01:05:55

回答

0

感谢@jvnill的答案...

用户和项目之间的关联是一个1比1的用户has_one :project和项目belongs_to :user。正如@jvnill指出的那样,不需要使用.find_by_id(params[:id])来限定查找,因为user_id只会在项目表中存在一次,并且Rails可以找到它。