Ruby on rails 如何让窗体使用不同的控制器
我有3种型号: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
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