Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何让窗体使用不同的控制器_Ruby On Rails_Ruby On Rails 3_Nested Forms - Fatal编程技术网

Ruby on rails 如何让窗体使用不同的控制器

Ruby on rails 如何让窗体使用不同的控制器,ruby-on-rails,ruby-on-rails-3,nested-forms,Ruby On Rails,Ruby On Rails 3,Nested Forms,我有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.fiel

我有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,因为我需要此嵌套表单在保存时重定向到Products/INDEX,而不是Locations/Show,因为我的LocationsController仅用于创建位置,而不是创建很多产品。我如何做到这一点

注意:我几乎没有Ruby和Rails方面的经验。

1)您可以使用嵌套路由:

resources :locations do
  resources :product_dates
  resources :products
end
2) 模型位置应具有“接受”的嵌套属性

class Location < AR:BAse
  accepts_nested_attributes_for :product_dates, :products
end
类位置

3) 控制器不应生成子对象,因为您只能初始化和保存父对象,子对象将自动保存

如果您想让表单使用其他控制器,请执行以下操作:

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

您已经定义了
,这表示您需要LocationsController,但您需要ProductsController。但是也许你应该做一个LocationsController,因为你的逻辑更适合那个控制器。但是我有两个表单,一个单独创建位置(位置/新),然后是创建产品的嵌套表单(产品/新)。两者都使用@location的形式_,但都重定向到locations/new。我不希望产品重定向到Products/index。这意味着我需要Product_dates控制器,现在我所有的产品路线都消失了。我编辑了我的答案,以便更深入地了解我想做什么。使用不同控制器的信号基本上是资源名称中的最后一个字吗?就像第一个搜索与“日期”相关的控制器,第二个搜索与“产品”相关的控制器一样?
<%= 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