2012-06-09 3 views
0

Я изо всех сил пытаюсь передать идентификатор в свой URL-адрес для вложенного ресурса, который я создал под названием Джобс.Проблема с вложенными ресурсами

ошибка я получаю, когда я пытаюсь передать @job объект в моей ссылке выглядит следующим образом:

No route matches {:action=>"edit", :controller=>"jobs", :user_id=>1, :id=>nil} 

который ясно показывает, что не может найти идентификатор правильно и так найти nil

на данный момент у меня есть мои настройки маршрутов, как так:

resources :users do 
    resources :jobs 
end 

и связь у меня есть <%= link_to "Edit", edit_user_job_path(@user.id,@job) %>

Что интересно, если я передаю объект @jobs с символом 's' в конце, он будет правильно загружать страницу, но когда я нажму на ссылку, вы попытаетесь добавить все эти идентификаторы заданий пользователей.

В мой контроллер для редактирования у меня есть:

def edit 
@user = current_user 
@job = @user.jobs.find(params[:id]) 
end 

Любая помощь действительно была бы оценена :)

UPDATE

Хорошо я определении объекта на неправильной странице мой контроллер (под редактированием вместо индекса). Проблема, которую я теперь имею это Couldn't find Job without an ID

Я обновил свой контроллер определение индекса к:

def index 
    @user = current_user 
    @jobs = @user.jobs.all 
    @job = @user.jobs.find(params[:id]) 
end 

И есть, на мой взгляд (рабочие места # индекс)

<% @jobs.each do |f| %> 
... 
<%= link_to "Edit", edit_user_job_path(@user.id,job) %> 
... 
<% end %> 

Любые советы были бы оценены если вы знаете, где я ошибаюсь :)

+0

Можете ли вы опубликовать выходные маршруты рейка специально для пути edit_user_job? Также вы говорите @ user.id, но не @ job.id? – John

+0

Я получил это раньше. @job должен быть равен нулю. – cdesrosiers

ответ

2

Эта ошибка означает, что @job - это нуль.

Ссылка на путь редактирования, а код контроллера, который вы предоставили, - это действие редактирования в контроллере. Кажется маловероятным, что страница редактирования ссылается на себя.

Посмотрите на код, который фактически отображает эту страницу (она будет отображаться в вашей трассировке стека), и вы обнаружите, что @job не установлен. Я подозреваю, что вы находитесь на странице индекса и есть что-то вроде:

<% @jobs.each do |job| %> 
    ... 
    <%= link_to "Edit", edit_user_job_path(@user.id,@job) %> 
    ... 
<% end %> 

Если это так, то ссылка должна быть job, не @job, т.е.

<%= link_to "Edit", edit_user_job_path(@user.id,job) %> 
+0

Спасибо iHiD, вы правы Я определяю объекты на неправильной странице своего контроллера. Однако теперь, когда я определил вещи (ответ был обновлен выше), я продолжаю получать «Не могу найти работу без идентификатора» - знаете ли вы, где я ошибаюсь? Спасибо –

+0

Вам не нужна строка '@job = @ user.jobs.find (params [: id])' вообще. Вы публикуете все задания. Вам не нужно искать ни одного человека. – iHiD

1

(расширение на iHiD-х комментарий со своим собственным сообщением)

Использование остаточных ресурсов означает, что вы собираетесь использовать значения по умолчанию для рельсов, что означает, что индексная страница дает вам список всех заданий и по умолчанию не имеет специального задания. Если вы запустите rake routes из командной строки, вы получите все маршруты с параметрами, заданными из URI.Это должно дать вам что-то вроде этого:

user_jobs GET /users/:user_id/jobs(.:format)   jobs#index 

Как вы можете видеть, нет ID (Params [: ID]) для действия индекса.

Смежные вопросы