标签: nested-forms

如何显示相关记录子集的表单,其中一些还不存在?

我有任务和用户.当用户完成任务时,我创建一个完成,其中有一个字段供用户指示他们花了多长时间.我需要一个表单,显示所有具有完成状态和time_spent属性的任务.在提交时,应更新已存在的完成,并应创建新的完成.如果可能的话,我想在Formtastic中这样做,但我会对基本的Rails 3解决方案感到满意.

class Completion < ActiveRecord::Base
  belongs_to :task
  belongs_to :user

  # attribute time_spent
end

class User < ActiveRecord::Base
  has_many :completions
  has_many :tasks, :through => :completions
end    

class Task < ActiveRecord::Base
  belongs_to :milestone
  has_many :completions
  has_many :users, :through => :completions
end
Run Code Online (Sandbox Code Playgroud)

另一个方面是我想要显示一组特定任务,例如那些属于里程碑的任务.我应该在里程碑控制器上有一个表格发布到完成控制器吗?

class Milestone < ActiveRecord::Base
  has_many :tasks
  has_many :completions, :through => :tasks
end
Run Code Online (Sandbox Code Playgroud)

更新 我现在已经找了几天,我发现了很多 死路 一条.Rails表单中的这个Multiple对象很接近,但它要求所有链接对象都已存在.

让这个问题与众不同的是,有些链接尚不存在,并且没有单一的模型可以嵌套链接.例如,使用Ryan Daigle的嵌套对象形式帖子)我已经将这个工作以一种形式进行编辑所有可能的用户完成,但我需要在一个表单中编辑可能的完成的子集.我是否需要制作一个冗余对象MilestoneCompletions即has_manyCompletions和belongs_toUser?可以使用ActiveModel has_many吗?

activerecord ruby-on-rails nested-sets nested-forms

5
推荐指数
1
解决办法
945
查看次数

一个简单形式的嵌套表单的例子?

我仍然在努力编写控制器和实际表单,以便能够使用可选模型将一个表单嵌套到另一个表单中?

我有消息,有很多联系人

提交邮件时,我想选择添加联系人.

我以此为例:

= simple_form_for Message.new, :remote => true do |f|
  #message_form
    = f.error_messages
    %p
      = f.input :account_name, :url => autocomplete_account_name_messages_path, :size => 40, :as => :autocomplete
    %p
      = f.input :topic, :required => true,
                :input_html => {:size => 30}

    #add_contact_btn
      = link_to "Add Contact"

      #contact_form
        = f.simple_fields_for :contactd do |fc|
        = fc.input :email
        = fc.input :first_name
        = fc.input :last_name

    = f.submit 'Give'
    = f.submit 'Request'
Run Code Online (Sandbox Code Playgroud)

对于Message.rb模型,我有以下内容:

has_many :contacts
accepts_nested_attributes_for :contacts, :reject_if =>:all_blank
Run Code Online (Sandbox Code Playgroud)

注意:当我使用时:simple_fields_for中的联系人不起作用,所以它是单数.但accept_nested_attributess_for的反向.

在我的消息创建控制器中,我包含了message.contacts.build

但是现在我仍然没有产生任何联系.

以下是我从google chrome中作为表单数据传递的内容:

message%5Baccount_name%5D:McKesson
message%5Btopic%5D:testing …
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails nested-forms simple-form

5
推荐指数
1
解决办法
9416
查看次数

Ruby on Rails:构建方法的反义词是什么?或者,我可以在保存之前从内存中销毁一个对象吗?

在Rails 3中,如果我习惯于build()构建一个对象,有没有办法在对象被保存之前销毁它?

我需要这个的原因是因为我使用嵌套的模型形式,有3代对象:Survey,有很多问题,而问题有很多答案.

在控制器中,我使用构建来预先填充问题和答案.

奇怪的是,如果Survey模型无效,我会使用错误消息重新呈现页面,并且预先构建的问题出现在表单中,但不是答案!

(顺便说一下,如果这很重要,我会使用简单表格.)

无论如何,在我将这些问题与答案一起重建之前,我只是销毁了所有问题,但是如果问题尚未保存到数据库中,你如何销毁这些问题呢?

在我的控制器中:

4.times do
  question = @survey.questions.build
  @answers.each { |answer| question.answers.build(:label => option.label, :input_type => option.input_type, :available_options => option.available_options) }
end
Run Code Online (Sandbox Code Playgroud)

任何帮助将不胜感激!谢谢!

ruby-on-rails nested-forms

5
推荐指数
1
解决办法
873
查看次数

Rails 3.1没有从nested_form渲染fields_for

我有一个项目模型has_many :tasks.我在rails 3.1中添加了一个嵌套资源,现在尝试使用nested_form gem来编辑项目时添加/删除任务.

我之前在另一个Rails3应用程序中使用了nested_form,它工作正常,但现在我的fields_for部分没有呈现任何东西.

这是我的代码:

#project.rb
class Project < ActiveRecord::Base

  attr_accessible :nr, :name, :client_id, :project_status_id, :hidden, :active, :description, :tasks_attributes


  has_many :tasks, :dependent => :destroy
  accepts_nested_attributes_for :tasks, :reject_if => lambda { |a| a[:name].blank? }, :allow_destroy => true


end


#task.rb
class Task < ActiveRecord::Base

  belongs_to :project

end

#views/projects/_form.html.erb
<%= simple_nested_form_for @project do |form| %>

  <%= form.input :nr, :label => 'Nr' %>
  <%= form.input :name, :label => 'Name' %>
  <%= form.association :client, :collection => Client.all(:order => 'name'), …
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails nested-forms nested-form-for simple-form ruby-on-rails-3.1

5
推荐指数
1
解决办法
3231
查看次数

带有accepts_nested_attributes_for和belongs_to的RecordNotFound

我明白了

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)

ruby-on-rails nested-forms nested-attributes

5
推荐指数
2
解决办法
2594
查看次数

在Rails HABTM嵌套表单中创建新记录

我有一个嵌套的表单(使用Ryan B的nested_form gem),使用has_and_belongs_to_many来设置has_and_belongs_to_many:

Opening has_and_belongs_to_many :contacts

Contact has_and_belongs_to_many :openings

在尝试向开口添加新联系人时,在这种情况下,我得到:

Can't mass-assign protected attributes: new_1346666966632

对于

"opening"=>{"contacts_attributes"=>{"new_1346666966632"=>{"contacts"=>{"name"=>"Test Contact",

我添加了相应的"accepts_nested_attributes_for"和"attr_accessible",并在控制器中构建了联系人,即@ opening.contacts.build和@ opening.contacts.build(params [:opening] [:contact_attributes]).

我哪里错了?在这里使用has_many通关系会更好吗?

编辑:

视图:

<%= simple_nested_form_for @opening, :wrapper => :plain do |f| %>
  <%= f.link_to_add "Add a contact", :contacts %>
  <%= f.button :submit %>
<% end %>
Run Code Online (Sandbox Code Playgroud)

其中使用partial为嵌套联系人生成字段:

<%= f.fields_for :contacts, @opening.contacts.build do |contact_form| %>
  <%= contact_form.input :name, :label => false, :input_html => { :class => 'span6' } %>
  <%= contact_form.input :company, :label => false, :input_html => { …
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails nested-forms has-and-belongs-to-many nested-attributes ruby-on-rails-3

5
推荐指数
1
解决办法
3207
查看次数

Symfony2使用相同的属性路径嵌入表单 - 错误冒泡问题

我已将用户的帐户区域拆分为不同的表单,然后在注册表单中,我将这些位一起拉出来,如下所示:

class RegistrationFormType extends AbstractType
{

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder
        ->add('email', 'email', array(
            'label' => '* Email address:'
        ))
        ->add('account_personal', 'my_personalinfo_form', array(
            'property_path' => 'account'
        ))
        ->add('account_contact', 'my_contactinfo_form', array(
            'property_path' => 'account'
        ))
    ;
}
Run Code Online (Sandbox Code Playgroud)

问题是错误消息account_personal正在冒泡到表单的顶部.例如,如果在个人信息表单中将名字留空,请输入"请输入您的名字"."个人"和"联系"表单在自己的页面上以自己的形式正常工作.

错误消息account_contact很好,并显示在正确的字段旁边.

但是,如果我在->add上面交换两个位(account_contact首先是这样),那么问题就会反转; account_personal现在工作的错误消息在相应的字段旁边显示正常,但现在错误account_contact被冒泡到顶部!

任何建议非常感谢!

-----编辑-----

个人信息表:

class PersonalInfoType extends AbstractType
{

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder
        ->add('title', 'text')
        ->add('first_name', 'text', array(
            'required' => true,
            'label' => …
Run Code Online (Sandbox Code Playgroud)

nested-forms symfony-forms symfony symfony-2.1

5
推荐指数
1
解决办法
4828
查看次数

验证失败时,Rails 3fields_for具有作用域删除字段

我将Rails 3,simple_form和cocoon用于has_many TodoLists项目的嵌套表单。我希望我的simple_fields_for调用仅包含尚未被软删除的TodoList,这就是为什么我想使用命名范围“未删除”的原因。

在我的项目表格中,我有:

<%= f.simple_fields_for :todo_lists, f.object.todo_lists.nondeleted do |todo_list_form| render "todo_list_fields", :f => todo_list_form end %>
Run Code Online (Sandbox Code Playgroud)

这在我的编辑视图的首次加载时效果很好(即,未显示已删除的TodoList),但是在提交表单时通过了失败的验证,所有新添加的TodoList都会丢失。

如果删除命名作用域,则验证失败后不会丢失新添加的TodoList,但随后会显示所有TodoList(包括已删除的TodoList)。

我也尝试了以下方法:

<% @project.todo_lists.each do |todo_list| %>
    <% if !todo_list.deleted && !todo_list.name.blank? %>
     <%= f.simple_fields_for :todo_lists, todo_list do |todo_list_form| render "todo_list_fields", :f => todo_list_form end %>
    <% end %>
<% end %>
Run Code Online (Sandbox Code Playgroud)

这解决了两个问题,但并没有提供我所需的灵活性,例如使TodoList保持正确顺序的能力。

有没有一种方法可以将集合传递给simple_fields_for(据我了解,它具有与Rails的fields_for相同的相关行为),这将允许我使用命名范围和排序,而不会在验证失败时删除新添加的字段?

ruby-on-rails nested-forms simple-form

5
推荐指数
1
解决办法
1015
查看次数

使用nested_form获取对象值

我有一个嵌套的表单(订单中的付款),我想在编辑视图中测试我的嵌套表单(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)

ruby-on-rails nested-forms fields-for

5
推荐指数
1
解决办法
1446
查看次数

数字动态生成的茧字段

我一直在使用Cocoon gem来动态生成rails中的嵌套字段.我遇到了一个应用程序,我想用数字标记cocoon生成的字段; 如下所示.

Field 1: __________
Field 2: __________
Field 3: __________
Run Code Online (Sandbox Code Playgroud)

我想我可以通过编写自己的javascript来强制它,但有没有内置功能可以帮助我做到这一点?

非常感谢任何指导.

ruby-on-rails nested-forms ruby-on-rails-4 cocoon-gem

5
推荐指数
1
解决办法
1112
查看次数