2010-10-16 2 views

ответ

0

Я бы рекомендовал не использовать ссылку здесь. Использование действия «получить» для изменения/добавления данных на сервере, как правило, неодобрительно. Кроме того, я не буду использовать «новое» действие, так как оно используется конвенцией в маршруте 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.

0

Вы на самом деле указать station_id для вашей модели Broadcast, такие как

script/generate scaffold broadcast name:string station_id:integer ... 

поэтому при добавлении широковещательных записей, он будет просить вас за station_id.

+0

Это не совсем то, что мне нужно. У меня есть индексный просмотр для станций и link_to «Добавить трансляцию» на каждой станции, поэтому мне нужно передать broadcast_id автоматически на новый метод контроллера вещания. –

+0

Вы не имеете в виду «передать station_id»? –