- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
更新:根据在此问题末尾发布的堆栈跟踪,我认为真正的问题是弄清楚我需要什么 attr_accessible 和构建关联设置来获取贡献者和链接器属性以使用新的 isbn id 进行更新。请帮我!
继 this question...
我有两个模型之间的连接表 - isbns 和贡献者 - 它们具有多对多的关系。我想在使用 fields_for 的嵌套表单中的 collection_select 下拉列表中使用贡献者模型中的现有值。
所以当我创建一个新的 isbn 时,我不想创建新的贡献者记录 - 我希望能够选择现有的。我希望能够选择许多贡献者,这就是我使用 nested_form gem 的原因。这允许我为贡献者动态创建额外的表单字段。
我的问题:我应该调用连接表上的方法吗?如果是这样,尽管几乎所有 attr_accessible 和 accepts_nested_attributes_for 都有,为什么我会收到“丢失块”错误:
isbn.rb:
attr_accessible :linkers_attributes, :contributors_attributes, :contributor_id,
has_many :linkers
has_many :contributors, :through => :linkers
accepts_nested_attributes_for :contributors
accepts_nested_attributes_for :linkers
attr_accessible :linkers_attributes, :isbns_attributes
has_many :linkers
has_many :isbns, :through => :linkers
accepts_nested_attributes_for :isbns
accepts_nested_attributes_for :linkers
belongs_to :isbn
belongs_to :contributor
accepts_nested_attributes_for :contributor
accepts_nested_attributes_for :isbn
attr_accessible :isbn_id, :contributor_id, :isbns_attributes, :contributors_attributes, :contributor_attributes, :isbn_attributes
def new
@isbn = Isbn.new
@title = "Create new ISBN"
1.times {@isbn.linkers.build}
end
<td class="main">
<%= nested_form_for @isbn, :validate => false do |f| %>
<h1>Create new ISBN</h1>
<%= render 'shared/error_messages', :object => f.object %>
<%= render 'fields', :f => f %>
<div class="actions">
<%= f.submit "Create" %>
</div>
<%= f.fields_for :contributors do |contributor_form| %>
<li>
<%= contributor_form.label 'Contributor Name' %>
<%= contributor_form.collection_select(:isbn_id, Contributor.all, :id, :personnameinverted ) %>
</li>
<%= contributor_form.link_to_remove "[-] Remove this contributor"%>
<% end %>
<%= f.link_to_add "[+] Add a contributor", :contributors %>
<%= field_set_tag 'Contributor' do %>
<li>
<%= f.label 'Contributor Sequence Number' %>
<%= f.text_field :descriptivedetail_contributor_sequencenumber%>
<%= tooltip(:xxx, :hover) %>
</li>
<%= f.fields_for :linkers do |contributor_form| %>
<li>
<%= contributor_form.label 'Contributor Name' %>
<%= contributor_form.collection_select(:isbn_id, Contributor.all, :id, :personnameinverted ) %>
</li>
<%= contributor_form.link_to_remove "[-] Remove this contributor"%>
<% end %>
<%= f.link_to_add "[+] Add a contributor", :contributors %>
<%= f.fields_for :contributors do |contributor_form| %>
<li>
<%= contributor_form.collection_select(:id, Contributor.all, :id, :personnameinverted, :include_blank => true ) %>
Started POST "/isbns" for 127.0.0.1 at 2011-06-08 20:12:48 +0100
Processing by IsbnsController#create as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"u0TszLESOnZlr4iEiBlVg6w9B5T+EH0dxJg/0E6PKuQ=", "isbn"=>{"descriptivedetail_titledetail_titleelement_titleprefix"=>"", "descriptivedetail_titledetail_titleelement_titlewithoutprefix"=>"qqq", "istc_id"=>"471", "descriptivedetail_contributor_sequencenumber"=>"", "contributors_attributes"=>{"0"=>{"id"=>"1", "_destroy"=>"false"}, "1307560328932"=>{"id"=>"14", "_destroy"=>"false"}}, "descriptivedetail_contributor_contributorrole"=>""}, "commit"=>"Create"}
User Load (0.2ms) SELECT "users".* FROM "users" WHERE "users"."id" = 2 LIMIT 1
Contributor Load (0.3ms) SELECT "contributors".* FROM "contributors" INNER JOIN "linkers" ON "contributors".id = "linkers".contributor_id WHERE "contributors"."id" IN (1, 14) AND (("linkers".isbn_id = NULL))
Completed in 308ms
最佳答案
好。这是我如何做到的。
安装茧 gem 。
最后也开始安装 Haml,
我拆分了 new 和 update 操作,因此新表单只是获取 id 集的快捷方式,只有最少的字段。然后用户可以编辑它,并添加贡献者。从用户的角度来看,这实际上并不坏,因为他们可以快速创建一个 isbn,而无需填写无数个字段。
isbns/new.html.haml
%td.main
= semantic_form_for @isbn do |f|
%h1 Create new ISBN
= render 'shared/error_messages', :object => f.object
= render 'fields', :f => f
%div#actions
= f.submit "Create"
- f.inputs do
= f.input :istc_id, :as => :select, :collection => Istc.all
= f.input :descriptivedetail_titledetail_titleelement_titlewithoutprefix
%h3 Contributors
#tasks
= f.semantic_fields_for :linkers do |linker|
= render 'linker_fields', :f => linker
.links
= link_to_add_association 'add contributor', f, :linkers
-f.buttons do
= f.submit 'Save'
.nested-fields
= f.inputs do
= f.input :contributor_id, :label_method => :keynames, :as => :select, :collection => Contributor.all
= link_to_remove_association "remove contributor", f
has_many :linkers
has_many :contributors, :through => :linkers
accepts_nested_attributes_for :contributors, :allow_destroy => true
accepts_nested_attributes_for :linkers, :allow_destroy => true
attr_accessible :linkers_attributes, :isbns_attributes
has_many :isbns, :through => :linkers
has_many :linkers
accepts_nested_attributes_for :linkers
belongs_to :contributor
belongs_to :isbn
accepts_nested_attributes_for :contributor
Started POST "/isbns/58" for 127.0.0.1 at 2011-06-09 12:34:14 +0100
Processing by IsbnsController#update as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"u0TszLESOnZlr4iEiBlVg6w9B5T+EH0dxJg/0E6PKuQ=", "isbn"=>{"istc_id"=>"360", "descriptivedetail_titledetail_titleelement_titlewithoutprefix"=>"thurs title", "linkers_attributes"=>{"0"=>{"contributor_id"=>"3", "_destroy"=>"", "id"=>"68"}, "1"=>{"contributor_id"=>"71", "_destroy"=>"", "id"=>"69"}, "2"=>{"contributor_id"=>"72", "_destroy"=>"", "id"=>"70"}, "3"=>{"contributor_id"=>"3", "_destroy"=>"", "id"=>"71"}}}, "commit"=>"Save", "id"=>"58"}
User Load (0.2ms) SELECT "users".* FROM "users" WHERE "users"."id" = 2 LIMIT 1
Isbn Load (8.2ms) SELECT "isbns".* FROM "isbns" WHERE "isbns"."id" = 58 ORDER BY descriptivedetail_titledetail_titleelement_titlewithoutprefix LIMIT 1
Linker Load (0.3ms) SELECT "linkers".* FROM "linkers" WHERE "linkers"."id" IN (68, 69, 70, 71) AND ("linkers".isbn_id = 58)
AREL (0.4ms) UPDATE "linkers" SET "contributor_id" = 3, "updated_at" = '2011-06-09 11:34:14.509943' WHERE "linkers"."id" = 71
Contributor Load (158.3ms) SELECT "contributors".* FROM "contributors"
Redirected to http://localhost:3000/isbns/58
Completed 302 Found in 545ms
关于ruby-on-rails - nested_form、collection_select、accepts_nested_attributes_for 和 fields_for,以及将记录添加到连接表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6282951/
我正在学习 RoR 并且我正在尝试找到如何使用 has_one 模型在另一个模型中设置 fields_for ,如下所示: class Child mother:
我怎样才能实现这样的目标? 结构是 => 一个测试有很多问题,一个问题有很多答案。 我在 Controller 中有 questions = @test.questions.build 和 quest
在我的 我有一个nested_form,如: { :action => "new" } do |build| %> build %> 在nested_field 里面,我有另一个fiel
在我的第一个 Rails 应用程序中,我尝试使用 form_for 和 fields_for 创建嵌套对象表单。到目前为止一切顺利,但我不知道如何在 fields_for block 中访问子对象。我
我正在以一种形式在索引 View 中编辑父模型的多个实例,如 Railscasts #198 中所示。每个父节点 has_many :children 和 Accepts_nested_attribu
我有一个 AJAX 调用: $('#enrollment_members').change(function(){ var memberNumber = $(this); $.ajax({type:
我的表单中有这个 fields_for : = f.fields_for :parts do |builder| = builder.input :body, label: builder.obj
我有具有一组值的动态表单。我创建了一个部分,其中包含我显示的文本字段。在他们每个人旁边,我想显示一个包含文本标题的标签。例如名字和姓氏以前是未知的。我该怎么做? 似乎我无法直接访问属性。但是当我使用标
我正在构建一个动态表单生成器。我遇到了一个似乎无法解决的问题。 所以我有一个名为“forms”的数据库表表单可以有“字段”.. 问题是,当用户创建一个新的“字段”(单击添加字段)时,它应该为该字段使用
我在 SO 上看到过几个类似的问题,但它们没有完全涵盖我的问题。 我有一个带有嵌套字段的非常基本的表单,问题是,当这些嵌套表单中出现任何验证错误时,所有 fields_for 字段都将重置为其原始值。
我希望我遗漏了一些明显的东西。我想看看可用的 options 是什么,您可以通过 options 哈希参数将它们传递给 rails fields_for 方法。 我查看了 fields_for doc
有什么方法可以访问嵌套的 form_bulder.object? ## controller @project = Project.new @project.tasks.build form_for(
我正在尝试创建一个嵌套表单来处理 has_many :through 关系并获取正在呈现的重复字段。 型号 公司 has_many :provides has_many :services, :thr
我使用的是嵌套属性,但 View 中未加载字段。 有人知道我想念什么吗? Rails 3.1,Ruby 1.9.2 模型1: class Traditions::Material :destroy
通常,当我在一个简单的 has_many 关联上使用 fields_for 时,表单上的输入名称类似于 foo[bars_attributes][0][name ],但在我的例子中,它没有在表单上显示
我有一个带有嵌套 fields_for 的表单。我试图允许由该嵌套表单生成的参数,但它们被强参数阻止了。我正在使用 rails 4.2.4 和 ruby 2.2.2 我看过一些官方文档: http
我有一个嵌套表单问题。我实现了 railscasts 196 和 197 的嵌套表单解决方案。如果我没有验证错误,它就可以工作。 因此,表单在加载时呈现完美,包括嵌套字段(在 fields_for 部
我正在尝试创建一个表单,该表单允许我为关联输入分组的关联提交新记录。 class Product false . 以下 fields_for给我正确的输入名称,例如 product[prope
在以下场景中,我需要检查 fields_for 中的 object 属性的值。环形。 :hidden %> 在循环中,:review_criteria_id呈现为隐藏字段,但我有一个场景,如果
在我看来,我正在使用 fields_for 来显示关系表的表单数据。然而,此表格的一部分将有可供选择的选择列表。我看到 form_for 和 fields_for 帮助程序有 label、text_f
我是一名优秀的程序员,十分优秀!