2017-08-02 108 views
0

我看了相关文章,但无法让我的代码工作。我有通过projects_devices表连接的设备和项目模型。我的模型是这样的:在Rails中保存相关的多对多关系

class Device < ActiveRecord::Base 
    has_many :projects, :through => :projects_devices 
    has_many :projects_devices 
    accepts_nested_attributes_for :projects_devices, allow_destroy: true 
end 


class Project < ActiveRecord::Base 
    has_many :devices, :through => :projects_devices 
    has_many :projects_devices 
    accepts_nested_attributes_for :projects_devices 
end 


class ProjectsDevice < ActiveRecord::Base 
    belongs_to :device 
    belongs_to :project 
end 

我的设备控制器:

def new 
    @device = Device.new 
    project_device = @device.projects_devices.build 
    @projects = Project.all 
end 

def create 
    @device = Device.create(device_params) 
end 

和我device_param:

def device_params 
    params.require(:device).permit(:name, :projects_devices_attributes => [:id , project_id: []]) 
end 

我的观点:

<%= f.label :Projects_devices %><br> 
<%= f.fields_for :projects_devices do |proj| %> 
    <%= proj.select(:project_id, [], {}, {class: "form-control projects-devices", multiple: "multiple" }) do %> 
    <% if (@projects) %> 
     <% for @project in @projects %> 
     <%= content_tag(:option, @project.name, value: @project.id) %> 
     <% end %> 
    <% end %> 
    <% end %> 
<% end %> 

我有许多人两个月之间有很多关联德尔斯。在创建和编辑设备时,我应该能够列出所有可用的项目。并只选择所需的。保存时,应更新projects_devices表。

我这里有多个问题:

  1. 当我保存一个新的设备,

    一个。 projects_devices表只有device_id而不是project_idproject_id为空

    b。如果有2个项目,并且我只选择一个,那么即使这样,只有device_id(如上所述,缺少project_id)创建了两个关联记录。它应该只创建一个关联。

  2. 当一个新的设备被编辑时,

    一个。项目列表中,所有项目列表都是空的。

    b。我看到显示了2个选择框,而不是一个项目(目前有2个项目)。

    c。没有更新设备。

我查了PARAMS:

"device"=>{"name"=>"ABC", 
"projects_devices_attributes"=>{"0"=>{"project_id"=>["", 
"298486374"]}}}, 
"commit"=>"Create Device"} 

我的Rails日志显示我的应用程序将只DEVICE_ID:

SQL (0.1ms) INSERT INTO `projects_devices` (`device_id`) VALUES (980190994) 

有人可以帮我找出这个问题

+0

我猜'project_id'应该是'project_ids'(只是猜测) – Deep

回答

0

林不知道,但尝试这个参数。 也许它有帮助。 :)

def device_params 
params.require(:device).permit(:name, :projects_devices_attributes =>[:id, :device_id, :project_id, :_destroy]) 
end 
+0

不,它没有帮助:( –