2013-02-12 5 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

+0

@jvnill - Да. Модель пользователя имеет 'has_one: project', а модель проекта имеет' принадлежит_то: пользователю'. – Matteo

+1

вот где ошибка. вы используете 'current_user.projects', когда у него есть только один проект. – jvnill

ответ

0

Благодаря @jvnill за ответ ...

Связь между пользователем и проектом является 1 к 1. Пользователь has_one :project и проект belongs_to :user. Как отметил @jvnill, нет необходимости квалифицировать поиск с помощью .find_by_id(params[:id]), потому что user_id будет отображаться только в таблице проектов, и Rails сможет его найти.