Ruby on Rails:在表单上为另一个模型添加表单

本·史密斯

在我的Ruby on Rails应用程序中,我试图实现“组”和“联系人”之间的关系,其中一个组可以包含许多联系人,而一个联系人可以是许多组的一部分。我正在使用一个名为Contactgroup的模型来处理这种关系,因此这些表是:

Group (id, name)
Contact (id, firstname, surname)
Contactgroup (group_id, contact_id)

以示例数据为例:

Groups:
ID      Name
1       Singers
2       Drummers

Contacts:
ID      Firstname    Surname
1       Freddy       Mercury
2       Roger        Taylor
3       Kurt         Cobain
4       Dave         Grohl

Contact Groups:
Group_ID        Contact_ID
1               1
1               3
1               4
2               2
2               4

我想做的就是获取它,以便用户创建组时,他们可以选择要添加到该组的联系人。这意味着存在组表单,用户可以在其中键入组名称,在此表单上,我要显示每个用户联系人的复选框,以便用户可以选择要添加到组中的联系人。他们单击提交,新组将保存在“组”表中,新的联系人组记录将被保存在“联系人组”表中。

这是app/views/groups/_form.html.erb代码:

<%= form_for @group do |f| %>

  <% if @group.errors.any? %>
    <div id="error_explanation">
      <h2>
        <%= pluralize(@group.errors.count, "error") %> prohibited this group from being saved:
      </h2>
      <ul>
        <% @group.errors.full_messages.each do |msg| %>
          <li><%= msg %></li>
        <% end %>
      </ul>
    </div>
  <% end %>

  <p>
    <%= f.label :name %><br>
    <%= f.text_field :name %>
  </p>

  <h2>Add members:</h2>
    <%= form_for([@group, @group.contactgroups.build]) do |f| %>
      <p>
        <%= f.collection_check_boxes(:contact_id, @contacts, :id, :firstname) %>
      </p>
      <p>
        <%= f.submit %>
      </p>
    <% end %>
  <p>
    <%= f.submit %>
  </p>

<% end %>

在这里,您可以看到我正在尝试使用的代码:

<h2>Add members:</h2>
    <%= form_for([@group, @group.contactgroups.build]) do |f| %>
      <p>
        <%= f.collection_check_boxes(:contact_id, @contacts, :id, :firstname) %>
      </p>
      <p>
        <%= f.submit %>
      </p>
    <% end %>
  <p>
    <%= f.submit %>
  </p>

<% end %>

我从rails指南(http://guides.rubyonrails.org/getting_started.html)中获得了此信息,但是我收到了undefined method#`的contactgroups错误,并且认为这不会给我我想要的东西。

我的路线文件是:

Rails.application.routes.draw do
  get 'sessions/new'
  get 'sessions/create'
  get 'sessions/destroy'
  resources :users
  get 'welcome/index'
  root 'welcome#index'
  resources :contacts

  resources :groups do
    resources :contactgroups
  end
  resources :contactgroups


  get 'sessions/new'
  get 'sessions/create'
  get 'sessions/destroy'
  controller :sessions do
    get  'login' => :new
    post 'login' => :create
    get 'logout' => :destroy
  end 
end

我的groups_controller:

class GroupsController < ApplicationController
    def index
        @groups = Group.where(user_id: session[:user_id])
    end
    def show
        @group = Group.find(params[:id])
        @members = Contactgroup.where(group_id: @group.id)
    end
    def new
        @group = Group.new
        @contacts = Contact.where(user_id: session[:user_id])
    end
    def edit
        @group = Group.find(params[:id])
    end
    def create
        @group = Group.new(group_params)
        @group.user_id = session[:user_id]
        if @group.save
            redirect_to @group
        else
            render 'new'
        end
    end
    def update
        @group = Group.find(params[:id])
        if @group.update(group_params)
            redirect_to @group
        else
            render 'edit'
        end
    end
    def destroy
        @group = Group.find(params[:id])
        @group.destroy
        redirect_to groups_path
    end
    private
    def group_params
        params.require(:group).permit(:name, :user_id)
    end
end

和contactgroups_controller:

class ContactgroupsController < ApplicationController
    def destroy
        @contactgroup = Contactgroup.find(params[:id])
        @contactgroup.destroy
        redirect_to(:back)
    end
end

我的模型如下:

Contact.rb

class Contact < ActiveRecord::Base
end

Group.rb

class Group < ActiveRecord::Base
end

Contactgroup.rb

class Contactgroup < ActiveRecord::Base
  belongs_to :contact
  belongs_to :group
end

我必须假定有一个简单的解决方案来解决此问题,因为我认为这通常是在其他系统上完成的,但是我不确定如何做到这一点。

有人可以帮忙吗?

本·史密斯

这比最初的想法/建议要简单得多。

我需要做的就是将模型更改为:

Contactgroup
  belongs_to :contact
  belongs_to :group

Contact
  has_many :contactgroups
  has_many :groups, through: :contactgroups, :dependent => :destroy

Group
  has_many :contactgroups
  has_many :contacts, through: :contactgroups, :dependent => :destroy

在中,groups_controller我需要将新方法和参数更改为:

def new
    @group = Group.new
    @group.contactgroups.build
end

private
def group_params
    params.require(:group).permit(:name, :user_id, { contact_ids: [] })
end

然后将以下代码行添加到app/views/groups/_form.html.erb

<%= f.collection_check_boxes :contact_ids, Contact.where(user_id: session[:user_id]), :id, :firstname ,{ prompt: "firstname" } %>

这为我提供了每个联系人的复选框,并允许从组表单中创建联系人组记录。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Ruby on Rails-在另一个模型的表单上添加模型的字段

来自分类Dev

Ruby on Rails-在另一个模型的表单上添加模型的字段

来自分类Dev

Ruby on Rails-保存一个模型相对于另一个模型的表单数据

来自分类Dev

从Ruby on Rails 4中的另一个控制器渲染表单

来自分类Dev

Ruby on Rails:表单路由到另一个URL

来自分类Dev

如何使用通过表单参数找到的一个表的结果查询另一个表-Ruby on Rails

来自分类Dev

Ruby on Rails:创建一个属于另一个模型的新记录

来自分类Dev

Ruby on Rails-在另一个模型中访问模型数据

来自分类Dev

Ruby on Rails-如何在一个模型中向另一个模型显示外键值

来自分类Dev

在Ruby on Rails中为每个记录创建一个输入日志表单

来自分类Dev

从Ruby on Rails中的另一个模型调用变量

来自分类Dev

用户在Ruby on Rails中标记(最喜欢的)另一个模型

来自分类Dev

在Rails中的ruby中添加到另一个页面的链接

来自分类Dev

在Rails中的ruby中添加到另一个页面的链接

来自分类Dev

为使用Ruby on Rails制作的网站创建另一个布局模板

来自分类Dev

如何在 Ruby on Rails 中将一个哈希动态添加到另一个哈希?

来自分类Dev

Ruby on Rails:获取表单输入到模型

来自分类Dev

无法从另一个模型访问一个模型的实例变量)(self.ruby)

来自分类Dev

如何使用回形针在另一个Ruby on Rails应用程序上上传图片?

来自分类Dev

如何在Rails上的ruby中重定向到另一个控制器动作

来自分类Dev

Ruby on Rails动态表单

来自分类Dev

Ruby在轨道上。从另一个控制器内部创建“模型”

来自分类Dev

Ruby on Rails:表单中的第一个参数不能包含nil或为空

来自分类Dev

如何在Ruby on Rails中验证表单中至少一个字段的存在

来自分类Dev

在 Ruby on Rails 中自动填充嵌套表单字段的第一个实例

来自分类Dev

在 Ruby on Rails 上设置一个表单,其中只需要在主页上提交一封电子邮件而不使用 Devise gem

来自分类Dev

Ruby on Rails:使用一种表单和一种提交方式为多个模型创建记录

来自分类Dev

自动在表单上填充控件,并在另一个表单上添加控件的值

来自分类Dev

我应该为管理员创建另一个模型吗?还是在Ruby on Rails中做到这一点的最佳方法是什么?

Related 相关文章

  1. 1

    Ruby on Rails-在另一个模型的表单上添加模型的字段

  2. 2

    Ruby on Rails-在另一个模型的表单上添加模型的字段

  3. 3

    Ruby on Rails-保存一个模型相对于另一个模型的表单数据

  4. 4

    从Ruby on Rails 4中的另一个控制器渲染表单

  5. 5

    Ruby on Rails:表单路由到另一个URL

  6. 6

    如何使用通过表单参数找到的一个表的结果查询另一个表-Ruby on Rails

  7. 7

    Ruby on Rails:创建一个属于另一个模型的新记录

  8. 8

    Ruby on Rails-在另一个模型中访问模型数据

  9. 9

    Ruby on Rails-如何在一个模型中向另一个模型显示外键值

  10. 10

    在Ruby on Rails中为每个记录创建一个输入日志表单

  11. 11

    从Ruby on Rails中的另一个模型调用变量

  12. 12

    用户在Ruby on Rails中标记(最喜欢的)另一个模型

  13. 13

    在Rails中的ruby中添加到另一个页面的链接

  14. 14

    在Rails中的ruby中添加到另一个页面的链接

  15. 15

    为使用Ruby on Rails制作的网站创建另一个布局模板

  16. 16

    如何在 Ruby on Rails 中将一个哈希动态添加到另一个哈希?

  17. 17

    Ruby on Rails:获取表单输入到模型

  18. 18

    无法从另一个模型访问一个模型的实例变量)(self.ruby)

  19. 19

    如何使用回形针在另一个Ruby on Rails应用程序上上传图片?

  20. 20

    如何在Rails上的ruby中重定向到另一个控制器动作

  21. 21

    Ruby on Rails动态表单

  22. 22

    Ruby在轨道上。从另一个控制器内部创建“模型”

  23. 23

    Ruby on Rails:表单中的第一个参数不能包含nil或为空

  24. 24

    如何在Ruby on Rails中验证表单中至少一个字段的存在

  25. 25

    在 Ruby on Rails 中自动填充嵌套表单字段的第一个实例

  26. 26

    在 Ruby on Rails 上设置一个表单,其中只需要在主页上提交一封电子邮件而不使用 Devise gem

  27. 27

    Ruby on Rails:使用一种表单和一种提交方式为多个模型创建记录

  28. 28

    自动在表单上填充控件,并在另一个表单上添加控件的值

  29. 29

    我应该为管理员创建另一个模型吗?还是在Ruby on Rails中做到这一点的最佳方法是什么?

热门标签

归档