Я бы рекомендовал не использовать ссылку здесь. Использование действия «получить» для изменения/добавления данных на сервере, как правило, неодобрительно. Кроме того, я не буду использовать «новое» действие, так как оно используется конвенцией в маршруте Rails Restful для представления формы, а не для сохранения данных. Все, что сказал, простой ответ на ваш вопрос, чтобы передать значение через помощника link_to как так:
link_to 'Add broadcast', new_broadcast_path(:station_id => station.id)
... и ваш «новый» метод на BroadcastsController бы:
def new
@broadcast = BroadCast.new(:station_id => params[:station_id])
if @broadcast.save
flash[:notice] = "New broadcast created!"
redirect :back # or whatever
else
# etc.
end
end
Но, опять же, это неправильный способ сделать это. То, что вы, вероятно, захотите сделать, - это оставаться в рамках Rails (и веб-соглашений) и использовать форму для создания новой записи широковещательной передачи посредством действия «create» на контроллере. Вы можете разместить эту форму рядом со своими станциями в индексном представлении, в котором представлена кнопка, которая указывает на правильное действие «create» BroadcastsController и использует hidden_field для установки station_id. Нечто подобное (EDIT: более эффективное использование hidden_field):
<% form_for :broadcast do |f| %>
<%= f.hidden_field :station_id, :value=> station.id %>
<%= submit_tag 'Add broadcast' %>
<% end %>
Предполагая, что вы установили успокоительный маршрут в routes.rb для трансляции как:
map.resources :broadcasts
... тогда ваша форма будет автоматически указывать к действию «создать» на BroadcastsController, который вы должны написать, чтобы выглядеть примерно так:
def create
@broadcast = BroadCast.new(params[:broadcast])
if @broadcast.save
# etc., etc.
end
Rails Guides являются хорошим местом, чтобы получить более комфортно с контроллером Actio Rails нс. Я также потратил некоторое время на просмотр действий RESTful и их использование в Rails.
Это не совсем то, что мне нужно. У меня есть индексный просмотр для станций и link_to «Добавить трансляцию» на каждой станции, поэтому мне нужно передать broadcast_id автоматически на новый метод контроллера вещания. –
Вы не имеете в виду «передать station_id»? –