Rails передает данные в форму для другой модели

У меня две модели, Users и Shifts.

  • Users: идентификатор, имя
  • Shifts: user_id, time_length

User имеет_много Shifts; Shift принадлежит_к User. Довольно простой.

Что я хочу сделать, так это добавить кнопку на мой show пользовательский контроллер (/users/1), которая ссылается на новый вид Shift контроллера (/shifts/new). Мне удалось сделать это с помощью кнопки, так как я хочу предварительно заполнить форму информацией из моей модели Users (т.е. отправить через user.id).

Я использую следующий код, который отлично линкуется, но не могу понять, как передать детали user.id

button_to "Create Shift", {:controller => "shifts", :action => "new"},{ :method => "get"}

person Jack    schedule 27.12.2011    source источник


Ответы (2)


Вы можете передать дополнительные параметры второму аргументу следующим образом:

button_to "Create Shift", { :controller => "shifts", :action => "new", :user_id => user.id }, { :method => "get" }

Это должно сгенерировать URL-адрес, например /shifts/new?user_id=5.

person sczizzo    schedule 27.12.2011

Вы можете использовать вложенные ресурсы:

В route.rb пишем:

map.resources :users do |users|
  users.resources :shifts
end

Тогда путь для новой формы смены будет new_user_shift_path = /users/:id/shift/new

А в shifts_controller можно получить пользователя вот так:

@user = User.find(params[:user_id])

Затем вы помещаете его в свою форму как скрытое поле тега. (Или не понадобится - точно не знаю)

person True Soft    schedule 27.12.2011