Rails 4 中的多对多嵌套属性(具有强参数)

2024-04-25

几天来我一直在努力解决这个问题。我正在使用 Rails 4(使用更新的批量分配技术)并尝试使用具有多对多关系的嵌套属性。我的记录正在保存到数据库,但一切都为零,并且我在日志中收到“未经允许的参数:学校、校友、前景”错误。

这是我所拥有的:

推荐.rb

class Referral < ActiveRecord::Base
 belongs_to :school
 belongs_to :alumni
 belongs_to :prospect
end

校友.rb

class Alumni < ActiveRecord::Base
  has_many :referrals
  has_many :prospects, through: :referrals

  accepts_nested_attributes_for :referrals
end

学校.rb

class School < ActiveRecord::Base
  has_many :referrals
  has_many :prospects, through: :referrals
  has_many :alumnis, through: :referrals

  accepts_nested_attributes_for :referrals
end

前景.rb

class Prospect < ActiveRecord::Base
  has_many :referrals
  has_many :alumnis, through: :referrals

  accepts_nested_attributes_for :referrals
end

推荐控制器.rb

def create
  @referral = Referral.create(referral_params)

  respond_to do |format|
    if @referral.save
      # ReferralMailer.referrer_email(@referral).deliver
      # ReferralMailer.referral_email(@referral).deliver
      format.html { redirect_to @referral, notice: 'Referral was successfully created.' }
      format.json { render action: 'show', status: :created, location: @referral }
    else
      format.html { render action: 'new' }
      format.json { render json: @referral.errors, status: :unprocessable_entity }
    end
  end
end

private
  # Use callbacks to share common setup or constraints between actions.
  def set_referral
    @referral = Referral.find(params[:id])
  end

  # Never trust parameters from the scary internet, only allow the white list through.
  def referral_params
    params.require(:referral).permit(prospects_attributes: [:first_name, :last_name, :email], alumnis_attributes: [:first_name, :last_name, :email], schools_attributes: [:name])

  end

_form.html.erb

<%= form_for(@referral) do |f| %>
  <% if @referral.errors.any? %>
    <div id="error_explanation">
      <h2><%= pluralize(@referral.errors.count, "error") %> prohibited this referral from being saved:</h2>

      <ul>
      <% @referral.errors.full_messages.each do |msg| %>
        <li><%= msg %></li>
      <% end %>
      </ul>
    </div>
  <% end %>

  <%= f.fields_for :school do |builder| %>
    <%= builder.label :name, "School Name" %>
    <%= builder.text_field :name %>
  <% end %>

  <%= f.fields_for :alumnis do |builder| %>
    <%= builder.label :first_name, "First Name" %>
    <%= builder.text_field :first_name %>

    <%= builder.label :last_name, "Last Name" %>
    <%= builder.text_field :last_name %>

    <%= builder.label :email, "Email" %>
    <%= builder.text_field :email %>
  <% end %>

  <%= f.fields_for :prospects do |builder| %>
    <%= builder.label :first_name, "First Name" %>
    <%= builder.text_field :first_name %>

    <%= builder.label :last_name, "Last Name" %>
    <%= builder.text_field :last_name %>

    <%= builder.label :email, "Email" %>
    <%= builder.text_field :email %>
  <% end %>
  <div class="actions">
    <%= f.submit %>
  </div>
<% end %>

服务器日志输出

Processing by ReferralsController#create as HTML
  Parameters: {"utf8"=>"✓", "authenticity_token"=>"Ee+rREUU/0wGzNFTEaMxr8oRStaA53X9fmDrlVRyrD8=", "referral"=>{"school"=>{"name"=>"asdf"}, "alumnis"=>{"first_name"=>"asdf", "last_name"=>"asfd", "email"=>"asdf"}, "prospects"=>{"first_name"=>"asdf", "last_name"=>"asdf", "email"=>"asdf"}}, "commit"=>"Create Referral"}
Unpermitted parameters: school, alumnis, prospects
   (0.1ms)  begin transaction
  SQL (0.5ms)  INSERT INTO "referrals" ("created_at", "updated_at") VALUES (?, ?)  [["created_at", Fri, 12 Jul 2013 03:49:06 UTC +00:00], ["updated_at", Fri, 12 Jul 2013 03:49:06 UTC +00:00]]
   (0.6ms)  commit transaction
   (0.1ms)  begin transaction
   (0.1ms)  commit transaction
Redirected to http://localhost:3000/referrals/68

推荐记录

=> #<Referral id: 68, created_at: "2013-07-12 03:49:06", updated_at: "2013-07-12 03:49:06", school_id: nil, alumni_id: nil, prospect_id: nil>

您还应该在每个嵌套模型参数中传递“id”尝试:

def referral_params
    params.require(:referral).permit(prospects_attributes: [:id,:first_name, :last_name, :email], alumnis_attributes: [:id,:first_name, :last_name, :email], schools_attributes: [:id,:name])    
end

有秋千

Cheers

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

Rails 4 中的多对多嵌套属性(具有强参数) 的相关文章

随机推荐

  • 使用ActiveRecord,有没有办法在after_update期间获取记录的旧值

    使用一个简单的示例进行设置 我有 1 张桌子 Totals 保存了总和amount第二个表中每条记录的列 Things When a thing amount更新后 我想简单地将旧值和新值之间的差异添加到total sum 现在我正在减去s
  • swagger-ui 无法使用自定义 XML ObjectMapper

    我正在开发一个应该启用 swagger ui 的 Spring Boot 应用程序 访问时http localhost 8080 swagger ui html http localhost 8080 swagger ui html有一个错
  • 如何使用按键事件

    我正在编写小型图形编辑器 我想在按 Ctrl A 时捕获事件 我使用这样的代码 这是测试版本 Override public void keyPressed KeyEvent e System out println Press switc
  • mvc:注解驱动未绑定

    当我在 NetBeans 中运行某个 Spring Web 3 项目时 出现此错误 org xml sax SAXParseException 行号 11 列数 30 这 元素的前缀 mvc mvc annotation driven 没有
  • # Rails 5.1 的未定义方法“map”

    我正在将 Rails 应用程序从 3 2 2 升级到 5 1 4 我直接使用参数时在地图方法上遇到错误 错误 ActionController Parameters 的未定义方法 map 在下一行 assignments params as
  • 尝试在 R 中创建直方图时 x 必须是数字

    我是 R 新手 我需要生成一些图表 我导入了一个 Excel 文件 需要在一列上创建直方图 我的导入代码是 file read xlsx femalecommentcount xlsx 1 header FALSE col file 2 上
  • 如何根据条件分割字符串

    分割字符串时 如何确保如果分隔符位于两个字符之间 则不会被考虑 Input String string a b c d e String split string split Output split 0 a split 1 b split
  • SugarORM 中的持久化对象

    我有一个图书课 public class Book extends SugarRecord private String mBookName private String mAuthorName private List
  • Laravel 快速入门指南路线不起作用

    好吧 我是 Laravel 新手 所以直接查看文档开始 文档中存在大量漏洞 因此需要花费大量精力和谷歌搜索来填补空白才能完成 Laravel 设置 我现在已经设置完毕并继续执行快速入门指南中的下一步 我创建了我的路线 Route get u
  • 检查线程状态,同时使其处于等待状态

    我想知道是否可以检查线程的状态 该线程可能处于可等待状态 但不一定如此 如果它处于可等待状态 我想将其保留在该状态 基本上 如何在不更改线程 可等待 状态的情况下检查线程的状态 通过等待 我的意思是如果我调用 wait pid 它会正确返回
  • 缺少库 com.sun.tools.attach

    我尝试跟随本教程 http dhruba name 2010 02 07 creation dynamic loading and instrumentation with javaagents 但我在进口方面遇到问题 I got The
  • MVC 3 在 ValidationSummary 中显示 HTML

    我试图在验证摘要中显示一个强标签 但它对其进行了编码并且无法正确显示 Html ValidationSummary false strong ERROR strong The form is not valid 我怎样才能让它发挥作用 最简
  • 为什么访问令牌请求需要redirect_uri?

    我正在开发一个基于 oauth2 提供程序rfc6749 https www rfc editor org rfc rfc6749我想知道为什么需要redirect uri访问令牌请求 https www rfc editor org rf
  • 抽象 NHibernate 标准是否有价值?

    我对 NHibernate 相当陌生 我见过的大多数示例都在基础上添加了一些抽象层Criterion or DetachedCriterion类 在简单的情况下 它是某种Query类可能看起来像这样 public class Query
  • Angular 自定义错误处理程序未从 Promise 获取错误类型

    当从承诺中抛出每个错误时 我的自定义错误处理程序都会丢失其类型 import HttpErrorResponse from angular common http import ErrorHandler Injectable Injecto
  • XElement 迭代并将其添加到父级

    您好 我有以下问题 请帮忙 因为我对 C 编程非常陌生 以前没有编程经验 在我的代码中 我应该迭代 Xml 文件中的 XElement 然后将该 Xelement 添加到称为 Capability 的父级 这是我的代码 if xElem H
  • 如何在 iOS 故事板中使用自定义字体来支持动态类型辅助功能大小

    我怎样才能使用动态类型文本样式 https developer apple com library ios documentation StringsTextFonts Conceptual TextAndWebiPhoneOS Custo
  • 带有 EPPlus 2.9 的 Chrome 16 中出现“从服务器收到重复标头”错误

    我正在玩EPPlus 2 9 http epplus codeplex com 由于某种原因我得到Duplicate headers received from server当我尝试下载单曲时出现错误 xlsx使用 Chrome 16 的文
  • CSS 高度 80% 不起作用

    我想让我的表格占据屏幕的 80 但现在它只是表格内容的大小 ecom mainarea center margin left 10 position relative width 80 height 80 when this is 500p
  • Rails 4 中的多对多嵌套属性(具有强参数)

    几天来我一直在努力解决这个问题 我正在使用 Rails 4 使用更新的批量分配技术 并尝试使用具有多对多关系的嵌套属性 我的记录正在保存到数据库 但一切都为零 并且我在日志中收到 未经允许的参数 学校 校友 前景 错误 这是我所拥有的 推荐