Rails 3具有嵌套属性的复杂形式

时间:2013-04-23 07:21:24

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.2

我有单一的表格,我有车辆详细信息,投诉详情和用户详细信息。车辆有很多投诉和用户有很多投诉。它是一个嵌套的表格形式,但由于某种原因,我觉得这种关联是错误的,我很少混淆表格应该如何是或者应该投诉has_one车辆和投诉has_one用户? 我在创建投诉时创建新用户和新车。此表单没有任何身份验证..

Vehicle.rb

 class Vehicle < ActiveRecord::Base
   attr_accessible :number, :vehicle_types , :complaints_attributes
   has_many :complaints
   accepts_nested_attributes_for :complaints
 end

User.rb

 class User < ActiveRecord::Base
  attr_accessible :address, :email_id, :mobile , :complaints_attributes
  has_many :complaints
  accepts_nested_attributes_for :complaints
 end

Complaint.rb

class Complaint < ActiveRecord::Base
  attr_accessible  :indecent_behaviour, :occurence_date_time, :other_complaints,      :place_occurence
  belongs_to :user
  belongs_to :vehicle 
end

由于

1 个答案:

答案 0 :(得分:0)

对我来说没有意义的是为什么用户和车辆会有嵌套投诉。您可能不会在创建新用户和新车辆的同时创建投诉。你呢?

据推测,制造用户,制造车辆,然后用户抱怨车辆,此时进行投诉。按时间顺序比创建用户或车辆时更早。

所以,也许可以取出嵌套属性。相反,您可以使用隐藏字段并将车辆ID作为参数传递,或者您可以使用嵌套资源路径来获取vehicle_id。通过抱怨的current_user的has_many关联创建投诉:

new_complaint_path( vehicle_id: @vehicle.id )

在投诉控制器中

def new
  @complaint = current_user.complaints.build
  @complaint[:vehicle_id] = params[:vehicle_id]
end