我试图覆盖autosave参数,因为我认为它无法完成.
我把它has_shipping_address从模型转移Order到ShippingAddress模型,现在我有:
#the models..
class Order < ActiveRecord::Base
belongs_to :billing_address
belongs_to :shipping_address
accepts_nested_attributes_for :billing_address
accepts_nested_attributes_for :shipping_address, :reject_if => proc { |attributes| attributes["has_shipping_address"] != '1' }
def after_initialize
self.build_billing_address unless billing_address
self.build_shipping_address unless shipping_address
end
end
class ShippingAddress < OrderAddress
attr_accessor :has_shipping_address
end
class OrderAddress < ActiveRecord::Base
validates_presence_of :name
#more validations here..
end
#the view
<% form_for @order do |f| %>
#...
<% f.fields_for :shipping_address do |addr_f| %>
<%= addr_f.check_box :has_shipping_address %>
<%= …Run Code Online (Sandbox Code Playgroud) 我在Rails中有一个三级多嵌套表单.设置如下:项目有许多里程碑,里程碑有很多笔记.目标是使用JavaScript在页面中编辑所有内容,我们可以在页面中的项目中添加多个新的里程碑,并将新的Notes添加到新的和现有的里程碑.
一切都按预期工作,除了当我向现有的里程碑添加新笔记(新的里程碑在向他们添加笔记时工作正常)时,新笔记将不会保存,除非我编辑任何实际属于里程碑的字段以标记形式"脏"/编辑.
有没有办法标记里程碑,以便添加的新Notes将保存?
编辑:对不起,很难粘贴所有代码,因为有很多部分,但是这里有:
楷模
class Project < ActiveRecord::Base
has_many :notes, :dependent => :destroy
has_many :milestones, :dependent => :destroy
accepts_nested_attributes_for :milestones, :allow_destroy => true
accepts_nested_attributes_for :notes, :allow_destroy => true, :reject_if => proc { |attributes| attributes['content'].blank? }
end
class Milestone < ActiveRecord::Base
belongs_to :project
has_many :notes, :dependent => :destroy
accepts_nested_attributes_for :notes, :allow_destroy => true, :allow_destroy => true, :reject_if => proc { |attributes| attributes['content'].blank? }
end
class Note < ActiveRecord::Base
belongs_to :milestone
belongs_to :project
scope :newest, lambda { |*args| order('created_at …Run Code Online (Sandbox Code Playgroud) 我正在制作一个具有以下属性的应用程序,我正在创建一个单一的表单,以便能够保存一个目标、一个目标的任务、一个目标的里程碑和一个里程碑的任务。
#app/models/goal.rb
has_many :tasks, :as => :achievement
has_many :milestones
accepts_nested_attributes_for :tasks
accepts_nested_attributes_for :milestones
#app/models/milestone.rb
belongs_to :goal
has_many :tasks, :as => :achievement
#app/models/task.rb
belongs_to :achievement, :polymorphic => true
Run Code Online (Sandbox Code Playgroud)
每当我用它的属性保存目标时,任务模型似乎对它们属于什么成就类型感到困惑,导致每个里程碑任务都被列为目标任务。我的表单、部分和控制器代码如下。
形式:
<%= nested_form_for @goal do |f| %>
<%= render 'shared/error_messages', :object => f.object %>
<%= render 'shared/goal_fields', :f => f %>
<%= f.fields_for :milestones do |ff| %>
<%= render 'shared/milestone_fields', :f => ff %>
<% end %>
<%= f.fields_for :tasks do |ff| %>
<%= render 'shared/task_fields', :f => ff %>
<% end …Run Code Online (Sandbox Code Playgroud) ruby-on-rails nested-forms form-for polymorphic-associations ruby-on-rails-3
我明白了
ActiveRecord :: RecordNotFound:对于ID =的订单,找不到ID = 3的客户端
在尝试为现有客户提交订单时.这通过键入以下内容通过表单或控制台进行:
Order.new(:client_attributes => { :id => 3 })
Run Code Online (Sandbox Code Playgroud)
payment_form.html.erb:
<%= semantic_form_for @order, :url => checkout_purchase_url(:secure => true) do |f| %>
<%= f.inputs "Personal Information" do %>
<%= f.semantic_fields_for :client do |ff| %>
<%= ff.input :first_name %>
<%= ff.input :last_name %>
<!-- looks like semantic_fields_for auto-inserts a hidden field for client ID -->
<% end %>
<% end %>
<% end %>
Run Code Online (Sandbox Code Playgroud)
Order.rb:
class Order < ActiveRecord::Base
belongs_to :client
accepts_nested_attributes_for :client, :reject_if …Run Code Online (Sandbox Code Playgroud) 我有一个嵌套的表单(订单中的付款),我想在编辑视图中测试我的嵌套表单(fields_for)中的值.但问题是我无法检查每个,我可以这样做:
<% if @order.payments[0].monthly == false %>
Run Code Online (Sandbox Code Playgroud)
你现在是如何检查每个,如:
<% if @order.payments[current_payment].monthly == false %>
Run Code Online (Sandbox Code Playgroud) 我正在移植一个使用Carrierwave到Rails 4的应用程序,但我遇到了强大的params问题.我有一个模特
accepts_nested_attributes_for :photos
Run Code Online (Sandbox Code Playgroud)
以下是上传图片的传递方式:
{
# ...
"model"=>
{
# ...
"photos_attributes"=>
{
"1362752177921"=>
{
"image"=>"test.jpg",
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
但是,我似乎无法弄清楚如何编写将接受的参数photos_attributes.
我试过.permit(photos_attributes: [])但它只是跳过它们,当我使用时permit!,uuid在保存之前创建的不会出现在SQL中,这是第二个问题:
photos.uuid may not be NULL: INSERT INTO "photos" ("created_at", "model_id", "image", "title", "updated_at") VALUES (?, ?, ?, ?, ?)
Run Code Online (Sandbox Code Playgroud)
这里缺乏强参数的文档,我甚至不确定如何继续.
更新 这适用于嵌套属性:
params.permit( ..., :photos_attributes => ['id', 'title', 'image', '_destroy'])
Run Code Online (Sandbox Code Playgroud)
但是看起来像Carrierwave或Nested Form应该先为Rails 4更新.它只是试图一直保存一个空图像.相同的代码(没有strong_params)在Rails 3中有效.
file-upload nested-forms carrierwave strong-parameters ruby-on-rails-4
使用 Rails 4.1.13 和 Ruby 2.0.0(虽然我在使用 Ralis 4.0 和 Ruby 1.9.3 时遇到了同样的问题。我已经阅读了许多关于这个特定问题的文章,但无法理解为什么我的解决方案(看起来完全像这样)没有工作,所以请帮助我。
我有两个模型 BlogPost 和 Tag。一个博客帖子可以有多个标签,一个标签可以有多个博客帖子。我通过第三个模型 BlogPostRelation 将它们连接起来。因此,这是我的基本设置:
# blog_post.rb
has_many :blog_post_tag_relations, dependent: :destroy
has_many :tags, :through => :blog_post_tag_relations
accepts_nested_attributes_for :blog_post_tag_relations, :tags
# tag.rb
has_many :blog_post_tag_relations, dependent: :destroy
has_many :blog_posts, :through => :blog_post_tag_relations
# blog_post_tag_relation.rb
belongs_to :tag
belongs_to :blog_post
validates_uniqueness_of :tag_id, :scope => [:blog_post_id]
validates :blog_post_id, :presence => true
validates :tag_id, :presence => true
accepts_nested_attributes_for :tag, :blog_post
Run Code Online (Sandbox Code Playgroud)
我有一个使用 Formtastic 的 BlogPost 表单,我在其中使用以下命令为 BlogPost 创建复选框:
<%= f.input :blog_title %> …Run Code Online (Sandbox Code Playgroud) 我有一个供应商名称和电子邮件的基本表单设置.我想将我的地址属性嵌套到这个表单中,但我一直得到以下错误
未允许的参数:地址
class Supplier < ActiveRecord::Base
has_many :addresses, dependent: :destroy, as: :addressable
accepts_nested_attributes_for :addresses
end
class Address < ActiveRecord::Base
belongs_to :addressable, polymorphic: true
belongs_to :supplier
end
class SuppliersController < ApplicationController
def allowed_params
params.require(:supplier).permit(:name, :email, {:address_attributes => [:first_name, :last_name, :address1, :address2, :city, :zip_code, :country_id]})
end
end
Run Code Online (Sandbox Code Playgroud)
供应商表格
%fieldset#admin-supplier-names.span-12
%label Name
= form.text_field :name
%label Email
= form.text_field :email
= form.fields_for :address do |address_fields|
%li= address_fields.text_field :first_name, placeholder: :first_name.upcase, value: current_user.first_name
%li= address_fields.text_field :last_name, placeholder: :last_name, value: current_user.last_name
%li= address_fields.text_field :address1, placeholder: …Run Code Online (Sandbox Code Playgroud) 我有一个表格可以将一个Parent和多个Child对象保存在一起.在初始化Child对象期间,它需要访问Grandparent.这是模型的样子:
class Grandparent
has_many :parents, inverse_of: :grandparent
end
class Parent
belongs_to :grandparent, inverse_of: :parents
has_many :children, inverse_of: :parent
accepts_nested_attributes_for :children
end
class Child
belongs_to :parent
delegate :grandparent, to: :parent
# Test code
after_initialize do
raise 'NoParentError' unless parent.present?
raise 'NoGrandparentError' unless grandparent.present? # Errors here!
puts 'All good!'
end
end
Run Code Online (Sandbox Code Playgroud)
请记住,表单用于同时保存新父项和多个子项,但我正在尝试访问祖父项对象中的信息.我读到inverse_of选项应该已经完成了这个伎俩,但child.grandparent仍然nil不幸.
这是实际导致失败的控制器部分:
@parent = @grandparent.parents.build(parent_params)
# prior to saving @parent
Run Code Online (Sandbox Code Playgroud)
由于某种原因,父母不知道祖父母是谁.
更新
看起来我可以通过以下代码解决该错误:
@parent = Parent.new(parent_params.merge(grandparent: …Run Code Online (Sandbox Code Playgroud) 鉴于父组件,我使用的是子组件DynamicFieldSet是一个分组FormItems。但是我收到错误:
Warning: validateDOMNesting(...): <form> cannot appear as a descendant of <form>. See CreateTopic > Form > form > ... > DynamicFieldSet > Form > form.
我试图删除<Form> </Form>子组件中的标签,但这是一个编译错误。
有没有一种方法可以禁用子窗体视图的呈现?
父组件
class CreateTopic extends React.Component {
render() {
return (
<div className="create-topic-container">
<h3>Create an event</h3>
<Form onSubmit={this.handleSubmit}>
<FormItem>...</FormItem>
<FormItem>...</FormItem>
<FormItem>...</FormItem>
<FormItem
{...formItemLayout}
label="Results"
style={{ marginBottom: SPACING_FORM_ITEM }}
>
{getFieldDecorator('results', {
rules: [
{
required: true,
message: 'Results cannot be empty.',
},
],
})(<DynamicFieldSet
form={this.props.form}
/>)}
</FormItem> …Run Code Online (Sandbox Code Playgroud) nested-forms ×10
forms ×3
activerecord ×1
associations ×1
carrierwave ×1
fields-for ×1
file-upload ×1
form-for ×1
nested ×1
reactjs ×1
ruby ×1