我正在使用 Rails 2.3.8 并接受_nested_attributes_for。
我有一个简单的类别对象,它使用 awesome_nested_set 来允许嵌套类别。
对于每个类别,我想要一个名为 code 的唯一字段。对于每个级别的类别,这将是唯一的。这意味着父类别都将具有唯一的代码,子类别在其自己的父类别中将是唯一的。
例如:
code name
1 cat1
1 sub cat 1
2 cat2
1 sub cat 1
2 sub cat 2
3 cat3
1 sub1
Run Code Online (Sandbox Code Playgroud)
这无需验证过程即可工作,但是当我尝试使用以下内容时:validates_uniqueness_of :code, :scope => :parent_id
这将不起作用,因为尚未保存父级。
这是我的模型:
class Category < ActiveRecord::Base
acts_as_nested_set
accepts_nested_attributes_for :children, :reject_if => lambda { |a| a[:name].blank? }, :allow_destroy => true
default_scope :order => "lft"
validates_presence_of :code, :name, :is_child
validates_uniqueness_of :code, :scope => :parent_id
end
Run Code Online (Sandbox Code Playgroud)
我已经想到了一种不同的方法来做到这一点,它非常接近工作,问题是我无法检查子类别之间的唯一性。
在第二个示例中,我在名为“is_child”的表单中嵌入了一个隐藏字段,以标记该项目是否为子类别。这是我的这个模型的例子:
class Category < ActiveRecord::Base
acts_as_nested_set
accepts_nested_attributes_for :children, …Run Code Online (Sandbox Code Playgroud) 我阅读了很多关于`has_one关系和嵌套属性的页面,但是没有成功地完成这项工作.任何帮助都会很棒.
每个用户都有_one网络.我正在尝试以一种形式收集两个属性的信息,但不断获得异常ActiveRecord::AssociationTypeMismatch in UsersController#create
传递的参数是:
{"utf8"=>"✓",
"authenticity_token"=>"I54tm1ovzHEHaXbBLTT+5tqBJv2795sKg978ot3HDBc=",
"user"=>{"name"=>"Bilbo Baggins",
"email"=>"bilbo@lotr.com",
"password"=>"[FILTERED]",
"password_confirmation"=>"[FILTERED]",
"network"=>{"home_lng"=>"-87.91894912719727",
"home_lat"=>"43.03812464542969",
"center_lng"=>"-87.91894912719727",
"center_lat"=>"43.03812464542969",
"radius"=>"500"}},
"commit"=>"Sign up"}
Run Code Online (Sandbox Code Playgroud)
我猜测参数Network必须以某种方式出现,network_attributes但我不知道如何.
控制器:
def create
@user = User.new(params[:user])
if (@user.save)
sign_in @user
flash[:success] = "One ring to rule them all!"
redirect_to @user
else
@title = "The journey begins..."
render 'new'
end
end
Run Code Online (Sandbox Code Playgroud)
视图:
<%= f.label :name %>
<%= f.text_field :name %>
<%= f.label :email %>
<%= f.text_field :email %><br />
<%= f.label :password %>
<%= f.password_field :password …Run Code Online (Sandbox Code Playgroud) ruby-on-rails nested-forms nested-attributes ruby-on-rails-3
我的模型中有以下代码:
Class Farm < ActiveRecord::Base
has_many :farm_products, :dependent => :destroy
has_many :products, :through => :farm_products
accepts_nested_attributes_for :farm_products
end
class Product < ActiveRecord::Base
has_many :farm_products, :dependent => :destroy
has_many :farms, :through => :farm_products
end
class FarmProduct < ActiveRecord::Base
belongs_to :farm
belongs_to :product
end
Run Code Online (Sandbox Code Playgroud)
我有一个表单来创建一个新的Farm,我想创建farm_products以及这个表单.我的farm_products表不仅包含外键字段.如何通过Javascript和/或JQuery添加或删除嵌套列?
UPD.我通过nested_forms找到了一个很棒的宝石,它正是我想做的!这是我视图中的代码
= nested_form_for @farm, :html => { :multipart => true } do |f|
= f.fields_for :farm_products do |fp|
-#fields goes here
= fp.link_to_remove 'Remove this task'
= fp.link_to_add "Add a task", :farm_products
Run Code Online (Sandbox Code Playgroud)
但是有一个错误说
undefined method `klass' for …Run Code Online (Sandbox Code Playgroud) jquery many-to-many ruby-on-rails nested-forms ruby-on-rails-3
我有以下表格与Formtastic:
= semantic_form_for @user, :url=> url_for(register_path), :html => {:id => "registration_form"} do |f|
= f.inputs :name => "Addresses", :id=> "addresses" do
= f.fields_for :addresses do |a|
%li.address
%ol
= a.input :street
= a.link_to_remove "Remove address"
#add_address
= f.link_to_add "New Address", :addresses
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
用于#的未定义方法`link_to_remove'
无论我使用semantic_fields_for还是只是fields_for
另外,我正在使用github上的内容(据说修复了这个)而不是发布的gem:
gem "nested_form", :git => "git://github.com/ryanb/nested_form.git"
Run Code Online (Sandbox Code Playgroud)
任何帮助将不胜感激,我在这里拔头发:/ /
谢谢!
堆栈跟踪
app/views/shared/_address_fields.html.haml:9:in `_app_views_shared__address_fields_html_haml___4308950470074423288_2167792580' actionpack (3.1.1) lib/action_view/template.rb:144:in `block in render' activesupport (3.1.1) lib/active_support/notifications.rb:55:in `instrument' actionpack (3.1.1) lib/action_view/template.rb:142:in `render' actionpack (3.1.1) lib/action_view/renderer/partial_renderer.rb:256:in `render_partial' actionpack (3.1.1) lib/action_view/renderer/partial_renderer.rb:228:in …
ruby-on-rails nested-forms formtastic ruby-on-rails-3 ruby-on-rails-3.1
我有2个型号用户和地址.
class User < ActiveRecord::Base
has_many :addresses
accepts_nested_attributes_for :addresses
end
class Address < ActiveRecord::Base
belongs_to :user
end
Run Code Online (Sandbox Code Playgroud)
我的控制器
def new
@user = User.new
@user.addresses << Address.new
@user.addresses << Address.new
end
def create
@user = User.new(params[:user])
if @user.save
#do something
else
render 'new'
end
end
Run Code Online (Sandbox Code Playgroud)
而我的观点
<%= form_for @user do |f| %>
<%= f.label :name %>
<%= f.text_field :name %>
<%= f.fields_for :addresses do |a| %>
<p> Home </p>
<%= a.text_field :state %>
<%= a.text_field :country%>
<%= a.text_field :street %>
<p> …Run Code Online (Sandbox Code Playgroud) 我有一个rails应用程序,有一个专辑和歌曲模型,有很多关系.我正在尝试使用simple_form和nested_form gems 将歌曲添加到相册.
如果我使用simple_form,则很容易创建关联,但是我无法使用nested_form.看来这应该有效:
<%= f.fields_for :songs do |song_form| %>
<%= song_form.association :songs %>
<%= song_form.link_to_remove "Remove this song" %>
<% end %>
<p><%= f.link_to_add "Add a song", :songs %></p>
Run Code Online (Sandbox Code Playgroud)
但是我得到了这个错误:RuntimeError in Albums#new Association :songs not found.如果我只使用simple_form,该关联工作正常.
正确的语法是什么?或者这些宝石不兼容?如果两个宝石不兼容,那么如何使用nested_form添加和删除相册中的歌曲?
/ views/albums/_form https://gist.github.com/leemcalilly/51e7c5c7e6c4788ad000
/ models/album https://gist.github.com/leemcalilly/9a16f43106c788ab6877
/ models/song https://gist.github.com/leemcalilly/0ccd29f234f6722311a0
/ models/albumization https://gist.github.com/leemcalilly/c627ad2b178e1e11d637
/ controllers/albums_controller https://gist.github.com/leemcalilly/04edf397b2fb2a3d0d1d
/ controllers/songs_controller https://gist.github.com/leemcalilly/bcbccc9259c39d0b6b7a
ruby-on-rails nested-forms has-many-through nested-form-for simple-form
在我的rails应用程序中,我有两个模型,a ClientPage和a ContentSection,where ClientPage has_many :content_sections.我正在使用nested_formgem将两个模型用相同的形式进行编辑.这个工作正常,只要ClientPage至少有一个ContentSection,但如果没有关联ClientSections,using nested_form的link_to_add方法抛出以下内容NoMethodError:
undefined method `values_at' for nil:NilClass
Run Code Online (Sandbox Code Playgroud)
表格结构如下:
<%= nested_form_for page, form_options do |f| %>
# ClientPage fields
# ClientSections
<%= f.link_to_add "Add new section", :content_sections %>
<% end %>
Run Code Online (Sandbox Code Playgroud)
只要至少有一个ClientSection与页面关联,这可以正常工作.一旦没有,就会抛出错误.删除link_to_add也会停止抛出错误.(实际上有第二个嵌套模型ContentSection,如果没有关联的模型,就会出现同样的问题.)
不知道我错过了什么相当明显的东西,但任何指针或建议将不胜感激.
该表单用于向项目添加项目,但项目不会删除!更糟糕的是,任何更新都会复制所有嵌套表单(1x2 = 2,然后下一次更新会为每个更新4等)
应用程序/管理/ project.rb
ActiveAdmin.register Project do
permit_params :title, :description, :git_url, :demo_url, :version, :lastpublished, :firstpublished,
project_features_attributes: [:project_id, :description, :_destroy => true],
project_mentions_attributes: [:project_id, :title, :url, :published, :_destroy => true]
form do |f|
f.semantic_errors *f.object.errors.keys
f.inputs
f.buttons
end
form do |f|
f.inputs "Project Details" do
f.inputs :title
f.inputs :description
f.inputs :git_url, :default => "http://github.com/"
f.inputs :demo_url
f.inputs :version
f.inputs :firstpublished
f.inputs :lastpublished
f.inputs do
f.has_many :project_features,
:allow_destroy => true,
:heading => 'Features' do |cf|
cf.input :description
end
end
f.inputs do …Run Code Online (Sandbox Code Playgroud) 我在 YouTube 上的 AngularConnect 2017 上看到了 Kara Erickson 的 Angular 表单演示。我特别感兴趣的部分是她描述嵌套反应形式的地方
我已经完成了 Kara 描述的所有事情,但null无论我尝试什么,我最终都会得到一个parentForm。
我在下面复制了我的代码的简化版本。问题是在child-form我得到的组件中null。
// 父组件
@Component({
selector: 'parent-form',
styleUrls: ['./parent-form.component.css'],
template: `
<form [formGroup]="createAlbumProfileForm" (ngSubmit)="onFormSubmitted($event)">
<input type="text" placeholder="Something unique to parent form"/>
<child-form></child-form>
</form>
`
})
export class ParentFormComponent implements OnInit {
parentForm: FormGroup;
constructor(private formBuilder: FormBuilder) { }
ngOnInit() {
this.parentForm = this.formBuilder.group({
yoloField: this.formBuilder.control('')
});
}
Run Code Online (Sandbox Code Playgroud)
// 子组件
@Component({
selector: 'child-form',
styleUrls: [ './child-form.component.scss' ],
viewProviders:[ { provide: ControlContainer, …Run Code Online (Sandbox Code Playgroud) 我是Ruby on Rails的初学者.目前,我有以下问题:我有一个类Game,其中包含一系列图片和句子交替.我希望创建新用户的用户Game需要提供一个起始图片或句子.如果他不这样做,我不想将新创建的游戏保存到数据库中.
class Game < ActiveRecord::Base
has_many :sentences
has_many :paintings
validates_inclusion_of :starts_with_sentence, :in => [true, false]
[...]
end
Run Code Online (Sandbox Code Playgroud)
我的方法是在/ games/new上,用户必须先给出一个绘画或一个句子,但我不确定如何强制执行此操作,尤其是如何在一个父对象中创建和保存子对象步.
nested-forms ×10
activeadmin ×1
angular ×1
associations ×1
forms ×1
formtastic ×1
jquery ×1
many-to-many ×1
ruby ×1
simple-form ×1
validation ×1