在嵌套轨道表单上创建多对多关系

2024-02-04

我正在尝试同时创建组、用户和成员资格(多对多关系)。人们可以在创建组时将用户添加到组中,然后我希望它能够路由到包含所有成员的组的视图。我可以将要创建的用户和当前用户的成员资格保存到数据库中。然而,我正在努力获取新创建的 User 对象的 id,以便保存新的成员资格。

Group.rb

class Group < ActiveRecord::Base
  has_many :memberships
  has_many :users, :through => :memberships
  has_many :users

  accepts_nested_attributes_for :users, :reject_if => lambda { |a| a[:name].blank? or a[:number].blank? }
end

会员资格.rb

class Membership < ActiveRecord::Base
  belongs_to :groups
  belongs_to :users
end

User.rb

class User < ActiveRecord::Base
  has_many :memberships
  has_many :groups, :through => :memberships
  belongs_to :group
end

组控制器.rb

class GroupsController < ApplicationController

  def show
    @group = Group.find(params[:id])    
    respond_to do |format|
      format.html
    end
  end

  def new
    @group = Group.new

    3.times { @group.users.build }
  end

  def create 
    @group = Group.new(params[:group]) 
    @group.memberships.build(:user_id => current_user.id)
    logger.info @group.users

    @group.users.each do |x|
      @group.memberships.build(:user_id => x.id )
    end

    respond_to do |format|
      if @group.save
        format.html { redirect_to(@group, :notice => 'Success!') }
      else
        format.html { render :action => "new" }
      end
    end

  end
end

我的表格如下所示:

其创建者:

视图/组/new.html.rb

<h1>New group</h1>

<%= form_for(@group) do |form| %>
<fieldset>
  <legend>Create a new group</legend>
  <%= render 'shared/group_error_messages', :object => form.object %>  
  <div class="clearfix">
    <%= form.label :group_name %>
    <div class="input">
      <%= form.text_field :group_name %>
    </div>
  </div>

  <div id="users">
    <div class="user">
      <%= form.fields_for :users, :url => {:action => 'new', :controller => 'users', :registered => false}, do |user_form| %>
      <%= render 'user', :user => user_form %>
      <% end %>
    </div>
  </div>
</div>

<div class="actions">
  <%= form.submit :value => 'Create your group', :class => 'btn success'%>
</div>
</fieldset>
<% end %>

视图/组/_user.html.rb

<div class="clearfix">
  <%= user.label :name %>
  <div class="input">
    <%= user.text_field :name %>
  </div>
</div>
<div class="clearfix">
  <%= user.label :number %>  
  <div class="input">
    <%= user.text_field :number %>
  </div>

</div>
<div class="clearfix" style="display:none">
  <%= user.label :password %>  
  <div class="input">
    <%= user.password_field :password, :value => newpass(6) %><!-- todo: fix this horrible hack -->
  </div>
</div>
<div class="clearfix" style="display:none">
  <%= user.label :registered %>  
  <div class="input">
    <%= user.text_field :registered, :value => false %> <!-- todo: fix this horrible hack -->
  </div>
</div>
<div class="clearfix" style="display:">
  <%= user.label :id %>  
  <div class="input">
    <%= user.text_field :id %> <!-- todo: fix this horrible hack -->
  </div>
</div>

所以我的主要愿望是获取这段代码来查找创建的用户 ID,然后使用这些 ID 来构建组和用户之间的成员身份。

Thanks 非常非常提前很多:)


I think

has_many :users, :through => :memberships
has_many :users

是错误的,你不能有两个或多个具有相同名称的关联。

试着做

has_many :users, :through => :memberships
has_many :members, :class_name => 'User', :foreign_key => :user_id

并在视图和控制器中进行相应的更改。喜欢

form.fields_for : members
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在嵌套轨道表单上创建多对多关系 的相关文章

  • git Push heroku master 因“HTTP 400curl 22 请求的 URL 返回错误”而失败

    我正在尝试推送仅显示 你好 世界 的 Rails 应用程序 然后我遇到了如下错误 我想知道如何解决这个问题 git推送heroku大师枚举对象 88 完成 计数对象 100 88 88 完成 增量压缩最多使用 4 个线程 压缩对象 100
  • Rails:RSpec - nil:NilClass 的未定义方法“cookie_jar”

    铁轨新手 尝试遵循迈克尔 哈特尔的教程 尝试添加辅助方法来模拟 RSpec 测试中的日志时陷入困境 describe when the a user has logged in and attempts to visit the page
  • 为什么私有辅助方法仍然可以在视图中访问?

    另一个 为什么会这样 的问题 我注意到私有辅助方法仍然可以在视图中访问 为什么 有没有办法防止这种情况 例如 当具有只能从另一个助手中调用的助手方法时 帮手是混合在一起的模块 http www ruby doc org docs Progr
  • ruby 我应该使用 self.或者 @

    这是我的红宝石代码 class Demo attr accessor lines def initialize lines self lines lines end end 在上面的代码中我可以使用 lines lines 大多数情况下 我
  • 如何在 Ruby 中访问私有类方法?

    给定一个 Ruby 类 class MyClass def self my class method puts class method end private def my method puts regular method end p
  • 为 has_many 或 habtm 动态创建 after_add 和 after_remove 回调?

    有没有办法动态添加after add and after remove回调现有的has many or has and belongs to many关系 例如 假设我有模型User Thing 和一个连接模型UserThingRelati
  • 设计对多个并发会话的支持

    我使用 Rails 3 2 11 和 Devise 2 2 3 作为订阅服务应用程序 我从另一位不再可用的开发人员那里继承了该应用程序 我是 Rails 和 Devise 的新手 我想要允许单个用户 电子邮件 拥有多个会话到同一个应用程序
  • Turbolinks 访问的页面中缺少 hubspot 聊天界面,但可用于全页面刷新

    我想将 hubspot 聊天界面集成到我的 Rails 4 Turbolinks 应用程序中 我已将 Google 跟踪代码管理器配置为在每个页面加载事件中显示支持聊天界面 该界面工作正常 GTM 标签 自定义 html PROBLEM 当
  • 带有取消订阅链接的 Rails 电子邮件

    我正在开发一个 Rails 4 2 应用程序 该应用程序每周都会有人们注册的活动 他们会在每次活动之前 每周 收到一封提醒电子邮件 我想要电子邮件中的一键取消订阅链接 这似乎是一个常见的任务 但我还没有找到一个好的当前解决方案 我看到的一些
  • “after_filter”如何/何时工作/运行?

    我正在使用 Ruby on Rails 3 1 我想知道 对于表现原因 无论是否after filter渲染视图文件后运行 也就是说 当用户访问我的应用程序 URL 时 他 她应该显示的相关视图文件先于渲染after filter运行或af
  • 如何在 Haml 中有条件地使用“content_for”包装器

    我正在尝试找到一种更干燥的方法来执行以下操作 if request xhr javascript my javascript else content for scripts do javascript my javascript 我在许多
  • Ruby on Rails 中的渲染验证错误

    在模型中说Task 我有以下验证 validates presence of subject project user status 如何使用其他控制器呈现这些验证的错误消息 在我使用的 CustomController 内部 Task c
  • PostgreSQL 字符串(255)限制 - Rails、Ruby 和 Heroku

    所以我有一个comments表的结构如下 Schema Information Table name comments id integer not null primary key body string 255 notified boo
  • Rails 模型中 self 的价值是什么?为什么没有明显的实例方法可用?

    我的 Rails 3 1 6 应用程序中有一个自定义访问器方法 即使该值不存在 它也会为属性分配一个值 my attr 属性是一个序列化哈希 除非指定了空白值 否则应将其与给定值合并 在这种情况下 它将把当前值设置为空白值 添加了检查以确保
  • Imperavi Redactor 内容未复制到隐藏文本区域

    我正在尝试使用因佩拉维编辑器 http imperavi com redactor 在这里控制我的富文本编辑 div class control group div class controls div div document ready
  • Ruby:如何设置枚举器的状态?

    我正在做一个基于 64 的排列增量器 我已经编写了所有工作代码 但是看看 Ruby 已经作为 Array permutation 生成了一个枚举器 我想利用它并更进一步 无需使用 下一个 进行每个排列 我可以设置起点吗 x A Z to a
  • 从 JSON 在 Devise 中创建用户

    我正在致力于将运行 Devise 的 Rails 3 1 应用程序与我的 iOS 应用程序集成以进行用户身份验证 我希望用户能够从应用程序注册 然后我可以存储这些凭据以便稍后登录 使用 RestKit 我这样做 IBAction regis
  • 分享到 Facebook 墙,不弹出对话框

    我正在 Rails 中构建一个 Facebook 应用程序 用户在其中创建一个条目并将其提交到其他用户的条目集合中 我想做的是在提交时自动将指向该条目的链接共享到用户的墙上 但我无法理解 Graph API 文档在没有弹出对话框的情况下执行
  • Rails 6 webpack 抛出“未捕获的引用错误:$未定义”

    大家好 我最近开始使用 ruby 2 6 5 开发 Rails 6 由于 Rails 6 引入了 webpack 所以我尝试使用 webpack 加载我的 js 文件 尽管我已经在 appliation js 中需要了 jquery 但我仍
  • 如何通过 jQuery onblur 提交表单

    所以我尝试通过 jQuery onblur 提交表单 即一旦焦点离开密码字段 表单就会通过 jQuery 提交 有类似的问题 但这不是我要找的 我尝试使用 document getElementById 但它不起作用 任何帮助表示赞赏 提前

随机推荐

  • Javascript - 从数组中删除唯一元素

    我想知道如何从数组中删除唯一元素 例如 var arr 1 2 2 4 4 会回来 2 2 4 4 Where 1 2 3 会回来 因为所有元素都是独一无二的 我相信我需要将每个元素与数组中的每个其他元素进行检查 但我不确定如何进行此操作
  • 数据结构成员的成员初始化

    我刚刚遇到了一个尴尬的问题 这个问题很容易解决 但我不喜欢这样做 在我的类的构造函数中 我正在初始化数据成员的数据成员 这是一些代码 class Button private The attributes of the button SDL
  • 如何使用Mono的“缓存”方法

    我是 spring webflux 的初学者 在研究时我发现了一些代码 例如 Mono result someMethodThatReturnMono cache 缓存 这个名字告诉我关于缓存某些东西 但是缓存在哪里以及如何检索缓存的东西
  • android 从 JavascriptInterface 启动Activity

    简单的一般问题 Webview 连接到我的 JavascriptInterface 类 并且它肯定是有用的 但是 因为 JavascriptInterface 不扩展 Activity 所以我似乎无法使用 startActivity int
  • 锦标赛分组放置算法

    给定对手种子列表 例如种子 1 到 16 我正在尝试编写一种算法 该算法将导致头号种子在该轮中对阵最低的种子 第二名种子对阵第二低的种子 依此类推 将 1 和 16 2 和 15 等分组为 比赛 相当容易 但我还需要确保较高的种子将在后续回
  • 使用C#或Powershell扫描所有可用的无线网络并连接到特定的SSID

    我正在尝试编写一个脚本来扫描所有可用的无线网络并连接到特定网络 SSID 有人已经为此编写了示例代码吗 由于某些限制 我无法安装第三方软件 托管 wifi api 查看这篇相关文章 在 C 中管理无线网络连接 https stackover
  • 未捕获的类型错误:无法解析模块说明符“firebase/app”。相对引用必须以“/”、“./”或“../”开头

    我遵循了有关 WebRTC 视频聊天的 YouTube 教程 因此我尝试编写它 在 localhost 中它可以工作 但是当我将其上传到 firebase 托管时 它就会出现此错误 我能做些什么 我是网络开发新手 所以请耐心等待 主要 ht
  • 如何从字符串中删除0

    我正在看函数trim但不幸的是 这并没有删除 0 我该如何将其添加到其中 我应该使用str replace 编辑 我要修改的字符串是一个消息编号 如下所示 00023460 功能ltrim 00023460 0 正是我需要的 显然我不想使用
  • 在 Python 中模拟导入模块

    我正在尝试对使用导入的外部对象的函数实施单元测试 例如助手 py is import os import pylons def some func arg var1 os path exist var2 os path getmtime v
  • 无法使用 OpenCV 从辅助网络摄像头的 VideoCapture 读取帧

    Code 与主网络摄像头 设备 0 完美配合的简单示例 VideoCapture cap 0 if cap isOpened std cout lt lt Unable to read stream from specified devic
  • 为什么我在 raw_input 期间无法捕获 KeyboardInterrupt?

    这是一个测试用例 try targ raw input Please enter target except KeyboardInterrupt print Cancelled print targ 当我按 ctrl c 时 我的输出如下
  • SqlAlchemy - 按关系属性过滤

    我对 SQLAlchemy 没有太多经验 但我遇到了一个无法解决的问题 我尝试搜索并尝试了很多代码 这是我的课程 简化为最重要的代码 class Patient Base tablename patients id Column Integ
  • 在 Bolts 中,如何使用 continueWith() 和 continueWithTask()?

    除了同步与异步之外 它们文档中的差异也让我感到困惑 他们的例子github页面 https github com BoltsFramework Bolts Android chaining tasks together看起来仍然是同步调用的
  • Netbeans - 从数据库生成实体类

    我使用的是 netbeans IDE 7 1 我正在尝试从数据库 sql server 生成实体类 我能够设置与此远程数据源的连接 但在数据库向导的新实体类中 表没有显示 并且在底部显示 选择至少一个表 我可以执行查询并浏览 netbean
  • 如何在Altera Quartus中生成.rbf文件?

    什么是 rbf 文件以及如何在 Windows 上从 Quartus 输出文件 sof 生成它们 An RBF is a 原始二进制文件例如 它代表原始数据 这些数据将被加载到闪存中 以便在上电时初始化 FPGA A SOF is an S
  • 获取数据访问层内的数据库上下文

    我在尝试解决 EF Core 方面的一些问题 我使用 MVC Core 应用程序中的启动代码来初始化数据库上下文 这是我的数据库上下文 public class AccountsDBContext DbContext public Acco
  • 将 UTC java.sql.Time 转换为具有正确 DST 的 java.time.localtime

    我在将从数据库获取的 java sql Time UTC 转换为 java time LocalTime GMT 1 DST 时遇到问题 总是缺少 DST 时间 因此 时间 03 00 仅转换为本地时间 04 00 而不是 05 00 Sa
  • 将 AES IV 存储在数据库中的密文前面是否安全?

    我想将 AES 加密数据存储在数据库字段中 将 AES IV 每行唯一 存储在密文前面是否安全 例如 IV 密文 两者都将以 Base64 进行编码 使用的Key不会存储在数据库中 这是安全的 初始化向量的目的是在生成的密码中插入一些随机性
  • 如何从控制台设置 parpool/matlabpool 中的最大工作人员数量?

    我知道如何使用 Matlab 中的并行首选项窗口更改最大工作人员数量 但我找不到任何有关如何从控制台 代码更改首选项的文档 特别是关于如何更改我可以的最大工作人员数量的文档在 for 循环中使用 任何帮助将不胜感激 你想要的parpool功
  • 在嵌套轨道表单上创建多对多关系

    我正在尝试同时创建组 用户和成员资格 多对多关系 人们可以在创建组时将用户添加到组中 然后我希望它能够路由到包含所有成员的组的视图 我可以将要创建的用户和当前用户的成员资格保存到数据库中 然而 我正在努力获取新创建的 User 对象的 id