首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >rails 4 has_many :通过不保存关联

rails 4 has_many :通过不保存关联
EN

Stack Overflow用户
提问于 2013-11-12 08:05:40
回答 1查看 3.5K关注 0票数 3

我有两个模特儿和许多很多的联系,如下:

代码语言:javascript
复制
class User < ActiveRecord::Base
    has_many :remark_users, :dependent => :destroy
    has_many :designated_remarks, :through => :remark_users, :source => :remark
end

class Remark < ActiveRecord::Base
     has_many :remark_users, :dependent => :destroy
    has_many :users, :through => :remark_users

    accepts_nested_attributes_for :users
end

以及这种关系:

代码语言:javascript
复制
class RemarkUser < ActiveRecord::Base
    belongs_to :remark
    belongs_to :user
end

应该进行保存的remarks_controller操作:

代码语言:javascript
复制
# PATCH Save users
def save_users
    @remark = Remark.find(params[:id])
    @remark.users.build(params[:remark_user_ids])
    @remark.save
end

以及表格:

代码语言:javascript
复制
<%= form_for @remark, :url => salveaza_responsabili_remark_path(@remark) do |f| %>
    <% @users.each do |user| %>
        <%= check_box_tag 'remark[remark_user_ids][]', user.id, @remark.users.include?(user) %>
        <%= user.name %>
    <% end %>
    <%= hidden_field_tag 'remark[remark_user_ids][]', '' %>
<% end %>

Te remarks_controller:

代码语言:javascript
复制
params.require(:remark).permit(:description, :suggestion, :origin_details,  process_type_id, :origin_id, :remark_user_ids)

用户和备注都已经存在,我需要一个表单来创建关联,最好是使用复选框。

在控制台中,保存关联。但我花了最后一天努力让它在浏览器中工作。我已经阅读了我在这件事上所能找到的所有东西,现在我很困惑。

有人能告诉我实际的表单应该是什么样子吗?如果需要在控制器中添加其他内容的话?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-11-12 08:43:05

您的表单没有任何问题,但可以将其简化为以下内容

代码语言:javascript
复制
<%= form_for @remark, :url => salveaza_responsabili_remark_path(@remark) do |f| %>
  <% @users.each do |user| %>
    <%= check_box_tag 'user_ids[]', user.id, @remark.users.include?(user) %>
    <%= user.name %>
  <% end %>
<% end %>

然后,在您的控制器中,您可以期待来自params[:user_ids]的数组

代码语言:javascript
复制
def save_users
  @remark = Remark.find(params[:id])

  # This is where you need to think about things.  If the checkbox in the form
  # contains all the users for a remark, the following code should work.
  #
  # @remark.user_ids = params[:user_ids]
  # @remark.save
  # 
  # otherwise, you have to loop through each user_id
  params[:user_ids].each do |user_id|
    @remark.remark_users.create!(user_id: user_id)
  end
end
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19923897

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档