Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 尝试使用复选框创建/删除多个关联,并且有多个:到_Ruby On Rails_Activerecord_Nested Attributes - Fatal编程技术网

Ruby on rails 尝试使用复选框创建/删除多个关联,并且有多个:到

Ruby on rails 尝试使用复选框创建/删除多个关联,并且有多个:到,ruby-on-rails,activerecord,nested-attributes,Ruby On Rails,Activerecord,Nested Attributes,这是我的模特的样子。用户可以根据其组(用户HABTM group HABTM Channel)以及已订阅的频道(用户HM channels T SUBSCRIPTION,我在这里没有使用HABTM,因为订阅将有一个显示顺序列) 我搞不懂的是如何在这个频道列表周围创建一种形式的复选框。理想情况下,我希望能够 创建用户已签出的订阅(如果没有) 存在, 并删除用户在以下情况下未选中的订阅: 它们是存在的 这是嵌套的属性表单吗?最后这样做了。你认为可以改进吗 我认为: <% for channel

这是我的模特的样子。用户可以根据其组(用户HABTM group HABTM Channel)以及已订阅的频道(用户HM channels T SUBSCRIPTION,我在这里没有使用HABTM,因为订阅将有一个显示顺序列)

我搞不懂的是如何在这个频道列表周围创建一种形式的复选框。理想情况下,我希望能够

  • 创建用户已签出的订阅(如果没有) 存在,
  • 并删除用户在以下情况下未选中的订阅: 它们是存在的

  • 这是嵌套的属性表单吗?

    最后这样做了。你认为可以改进吗

    我认为:

    <% for channel in @channels do %>
      <%= check_box_tag "subscription[][channel_id]", channel.id, @user.channels.include?(channel) %>
      <%= channel.name %>
    <% end %>
    
    <%= hidden_field_tag "subscription[][channel_id]", "" %>
    <%= submit_tag %>
    
    @channels = Channel.joins(
      'JOIN channels_groups ON channels.id = channels_groups.channel_id', 
      'JOIN groups_users ON channels_groups.group_id = groups_users.group_id', 
      'JOIN users ON groups_users.user_id = users.id'
    ).where('users.id = ?', @user.id).uniq
    
    <% for channel in @channels do %>
      <%= check_box_tag "subscription[][channel_id]", channel.id, @user.channels.include?(channel) %>
      <%= channel.name %>
    <% end %>
    
    <%= hidden_field_tag "subscription[][channel_id]", "" %>
    <%= submit_tag %>
    
    # get all of a users subscriptions that weren't checked and delete them
    @user.subscriptions.where('channel_id IN (?)', @user.channel_ids - params[:subscription].map{ |s| s['channel_id'].to_i }.flatten).delete_all
    # then add all those that were checked
    Subscription.create(params[:subscription]) { |s| s.user_id = @user.id }