标签: nested-forms

accepts_nested_attributes_for 验证

我正在使用 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)

validation ruby-on-rails nested-forms

4
推荐指数
1
解决办法
2864
查看次数

尝试在Rails中保存嵌套属性时的ActiveRecord :: AssociationTypeMismatch

我阅读了很多关于`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

4
推荐指数
1
解决办法
8064
查看次数

has_many:通过可以构建多个实例的nested_form

我的模型中有以下代码:

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

4
推荐指数
1
解决办法
3708
查看次数

如何在Rails 3.1中使用nested_form与Formtastic一起工作?

我有以下表格与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

4
推荐指数
1
解决办法
1670
查看次数

嵌套表单Rails

我有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)

ruby forms ruby-on-rails associations nested-forms

4
推荐指数
1
解决办法
1527
查看次数

如何使用simple_form和嵌套表单通过关联为has_many创建嵌套表单?

我有一个rails应用程序,有一个专辑和歌曲模型,有很多关系.我正在尝试使用simple_formnested_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

4
推荐指数
1
解决办法
2637
查看次数

使用带有空关联的nested_form gem时出错

在我的rails应用程序中,我有两个模型,a ClientPage和a ContentSection,where ClientPage has_many :content_sections.我正在使用nested_formgem将两个模型用相同的形式进行编辑.这个工作正常,只要ClientPage至少有一个ContentSection,但如果没有关联ClientSections,using nested_formlink_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,如果没有关联的模型,就会出现同样的问题.)

不知道我错过了什么相当明显的东西,但任何指针或建议将不胜感激.

nested-forms ruby-on-rails-3

4
推荐指数
1
解决办法
874
查看次数

ActiveAdmin复制嵌套表单并删除复选框不起作用

该表单用于向项目添加项目,但项目不会删除!更糟糕的是,任何更新都会复制所有嵌套表单(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)

nested-forms activeadmin ruby-on-rails-4

4
推荐指数
1
解决办法
1495
查看次数

我嵌套的 Angular 反应式表单没有从父组件获取 FormGroup

我在 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)

nested-forms angular2-forms angular angular-reactive-forms

4
推荐指数
1
解决办法
1258
查看次数

Rails:强制用户在保存父级之前创建子对象

我是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 ruby-on-rails-3

3
推荐指数
1
解决办法
2400
查看次数