Как заставить форму использовать другой контроллер - PullRequest
2 голосов
/ 16 июля 2011

У меня есть 3 модели:

Location
belongs_to :user
has_many :products, :product_dates

ProductDate 
belongs_to :user, :location
has_many :products

Product 
belongs_to :user, :location, :product_date

У меня есть вложенная форма:

<%= form_for @location do |first| %>
<%= f.fields_for :product_dates do |second| %>
<%= second.fields_for :products do |third| %>

У меня есть только два контроллера, но для моей вложенной формы я использую ProductsController:

def new
  @location = Location.new
  3.times do
    product_date = @location.product_dates.build
    4.times { product_date.products.build }
  end
end

Я хочу, чтобы он использовал мой ProductsController, потому что мне нужна эта вложенная форма для перенаправления в Products / INDEX при сохранении, а не в Locations / Show, поскольку мой LocationsController предназначен только для создания Locations, а не для многих продуктов.Как мне это сделать?

Примечание: У меня немного опыта работы с Ruby и Rails.

Ответы [ 2 ]

1 голос
/ 17 июля 2011

Если вы хотите, чтобы ваш form_for использовал другой контроллер, который вы используете:

<%= form_for @location, :url => products_path do |f| %>

Если он вложен, как моя ситуация, то вы также можете сделать так, чтобы ваши дочерние поля делали то же самое.

<%= f.fields_for :product_dates, :url => products_path do |date| %>

и

<%= date.fields_for :products, :url => products_path do |product| %>

Затем я перенаправляю обратно к моей продукции / ИНДЕКС:

def create
        @location = Location.new(params[:location])
        if @location.save
            redirect_to :action => 'index', :notice => "Successfully created products."
        else
            render :action => 'new'
        end
    end
1 голос
/ 16 июля 2011

1) вместо этого вы можете использовать вложенные маршруты:

resources :locations do
  resources :product_dates
  resources :products
end

2) Модель Location должна иметь acceptpts_nested_attributes_for

class Location < AR:BAse
  accepts_nested_attributes_for :product_dates, :products
end

3) контроллер не должен создавать дочерний объект, потому что вы можете только инициализировать и сохранить родительский объект, дочерние объекты будут сохранены автоматически

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