Вопрос отношения базы данных рельсов новичка - PullRequest
0 голосов
/ 16 октября 2010

У меня есть две модели Station и Broadcast.Трансляция belongs_to Станция и имеет station_id столбец.

Я не знаю, как заставить new метод в BroadcastController ожидать значение station_id и как создать новый Broadcast с правильным station_id в нем.

Ответы [ 2 ]

0 голосов
/ 16 октября 2010

Я бы рекомендовал не использовать ссылку_ здесь.Использование действия 'get' для изменения / добавления данных на сервере обычно не одобряется.Кроме того, я бы не использовал действие «new», так как оно используется соглашением в маршруте 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, и использует скрытое поле для установки station_id.Что-то вроде (РЕДАКТИРОВАТЬ: лучше использовать hidden_field):

<% form_for :broadcast do |f| %>
  <%= f.hidden_field :station_id, :value=> station.id %>
  <%= submit_tag  'Add broadcast' %>
<% end %>

Предполагая, что вы установили спокойный маршрут в маршрутах.Форма автоматически указывает на действие 'create' в BroadcastsController, которое вы должны написать примерно так:

def create
  @broadcast = BroadCast.new(params[:broadcast])
  if @broadcast.save
  # etc., etc.
end

Направляющие Rails - это хорошее место для более удобной работы сДействия контроллера Rails.Я также потратил некоторое время на просмотр действий RESTful и их использования в Rails.

0 голосов
/ 16 октября 2010

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

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

, поэтому при добавлении записи широковещания вам будет предложено ввести station_id.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...