我查看了相关帖子,但无法让我的代码正常工作。我有通过projects_devices
表连接的设备和项目模型。我的模型看起来像这样:
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表。
我有很多问题:
当我保存新设备时,
一个。 projects_devices
表仅包含device_id
但不包含project_id
。 project_id
为空
湾如果有2个项目并且我只选择了一个项目,那么即使这样,也会创建仅有device_id
的两个关联记录(如上所述,缺少project_id
)。它应该只创建一个关联。
编辑新设备时
一个。项目清单,所有项目清单都是空的。
湾我看到显示2个选择框而不是项目中的一个(当前有2个项目)。
℃。更新设备没有发生。
我检查了参数:
"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 :(得分:0)
我不确定,但试试这个参数。 也许有帮助。 :)
def device_params
params.require(:device).permit(:name, :projects_devices_attributes =>[:id, :device_id, :project_id, :_destroy])
end