是否有方法(或实现类似功能的方法)来做fields_for_with_index?
例:
<% f.fields_for_with_index :questions do |builder, index| %>
<%= render 'some_form', :f => builder, :i => index %>
<% end %>
Run Code Online (Sandbox Code Playgroud)
部分呈现需要知道当前索引在fields_for循环中是什么.
我正在使用Rails 3.0.3和ruby 1.9.2p0.
在我的profiles_controller(编辑功能)中,我有这个电话
@profile = Profile.find(params[:id])
@profile_items = @profile.profile_items.order("pos")
Run Code Online (Sandbox Code Playgroud)
以正确的顺序获取@profile_items,按"pos"排序.在_form.html.erb中我有以下内容
<% @profile_items.each do |pi| %>
<%= pi.pos %> |
<% end %>
<%= f.fields_for :profile_items do |f2| %>
<%= render 'profile_item_fields', :f => f2 %>
<% end %>
Run Code Online (Sandbox Code Playgroud)
第3行是测试代码,用于显示@profile_items的顺序正确.但是当它们被渲染时,它们已经丢失了排序顺序!
现在我已经搜索了很多答案,我认为这必须是一个常见的"陷阱".
感谢任何帮助......
最后转移到Rails 3进行新项目,并且已经遇到了新手问题.
尝试做一个简单的嵌套表单.
2个型号:列表和任务
列表模型
class List < ActiveRecord::Base
has_many :tasks, :dependent=>:destroy
accepts_nested_attributes_for :tasks, :reject_if => lambda { |a| a[:name].blank? }
end
Run Code Online (Sandbox Code Playgroud)
任务模型
class Task < ActiveRecord::Base
belongs_to :list
end
Run Code Online (Sandbox Code Playgroud)
列表控制器
def new
@list = List.new
3.times{ @list.tasks.build }
end
Run Code Online (Sandbox Code Playgroud)
列表/ new.html.erb
<% form_for :list, :url=>{:action=>"create"} do |f| %>
<%= f.text_field :name, :class=>'big' %>
<%= f.label :name, "ex: Today's Todos, Christmas List" %>
<% f.fields_for :tasks do |builder| %>
<p>
<%= builder.label :name, "Task" %>
<%= builder.text_field :name %>
<%= …Run Code Online (Sandbox Code Playgroud) 如何使用fields_for迭代一个对象数组(所有相同的模型)?该数组包含current_user创建的对象.
我目前有:
<%= f.fields_for :descriptionsbyuser do |description_form| %>
<p class="fields">
<%= description_form.text_area :entry, :rows => 3 %>
<%= description_form.link_to_remove "Remove this description" %>
<%= description_form.hidden_field :user_id, :value => current_user.id %>
</p>
<% end %>
Run Code Online (Sandbox Code Playgroud)
但我想用我在控制器中创建的数组替换:descriptbyuser - @descriptionsFromCurrentUser
这也是Ryan Bate的"nested_form_for"内部
任何指针将不胜感激!
亚当
我正在尝试同时使用另一个嵌套资源创建一个资源.我正在使用Rails4和simple_form 3.0.0rc.这是我的代码.
class User < ActiveRecord::Base
has_one :profile
accepts_nested_attributes_for :profile
end
class Profile < ActiveRecord::Base
belongs_to :user
end
Run Code Online (Sandbox Code Playgroud)
class UsersController < ApplicationController
def new
@user = User.new
@user.build_profile
end
def create
user = User.new user_params
user.save
redirect_to root_url
# @par =params
end
private
def user_params
params.require(:user).permit(:email, profile_attributes: [:name])
end
end
Run Code Online (Sandbox Code Playgroud)
<%= simple_form_for @user do |f| %>
<%= f.input :email %>
<%= simple_fields_for :profile do |p| %>
<%= p.input :name %>
<% end %>
<%= f.submit %>
<% …Run Code Online (Sandbox Code Playgroud) ruby-on-rails nested-attributes fields-for simple-form strong-parameters
我正在学习RoR,我正在尝试找到如何使用has_one模型在另一个中设置fields_for:
class Child < ActiveRecord::Base
belongs_to :father
accepts_nested_attributes_for :father
end
class Father < ActiveRecord::Base
has_one :child
belongs_to :grandfather
accepts_nested_attributes_for :grandfather
end
class Grandfather < ActiveRecord::Base
has_one :father
end
Run Code Online (Sandbox Code Playgroud)
我在Railscasts上使用嵌套模型表单第1部分来获取这些:在children_controller.rb中:
def new
@child = Child.new
father=@child.build_father
father.build_grandfather
end
def child_params
params.require(:child).permit(:name, father_attributes:[:name], grandfather_attributes:[:name])
end
Run Code Online (Sandbox Code Playgroud)
我的形式:
<%= form_for(@child) do |f| %>
<div class="field">
<%= f.label :name %><br>
<%= f.text_field :name %>
</div>
mother:<br>
<%= f.fields_for :father do |ff| %>
<%= ff.label :name %>
<%= ff.text_field :name %><br>
grand mother:<br>
<%= f.fields_for :grandfather …Run Code Online (Sandbox Code Playgroud) ruby-on-rails form-for fields-for nested-form-for ruby-on-rails-4
我一直在努力为具有数组字段的Mongoid模型创建表单.我希望我的表单在数组中的每个条目的文本框中.如果我正在创建一个新记录,则默认将是一个空字段(以及一些javascript以在页面上动态添加新字段).
我使用fields_for搜索了一个解决方案,但似乎更倾向于处理你有一个对象/模型数组的情况,而不是我拥有的情况,这是一个字符串数组.
我将使用一个人和一个电话号码的例子.
class Person
include Mongoid::Document
field :name, :type => String
field :phone_numbers, :type => Array
end
Run Code Online (Sandbox Code Playgroud)
对于控制器,只假设典型的控制器,但在new方法中我用一个空字符串初始化phone_number数组.
这是表单代码:
<%= form_for(@person) do |f| %>
<div class="field">
<%= f.label :name %><br />
<%= f.text_field :name %>
</div>
<div class="field">
<%= f.label :phone_numbers %><br />
<% @person.phone_numbers.each do |phone_number| %>
<%= text_field_tag "person[phone_numbers][]", phone_number %>
<% end %>
</div>
<% end %>
Run Code Online (Sandbox Code Playgroud)
一切正常.有一些我不喜欢的事情.
有没有人对如何实现这个有更好的建议?或者你认为这是正确的吗?
我在Rails 3.2.5中做了一个嵌套的表单,但是当我添加accepts_nested_attributes_for我的fields_for消失时(他们只是停止在我的表单中显示).
这是我的模特:
class Product < ActiveRecord::Base
attr_accessible :title, :description, :variants_attributes
has_many :variants
accepts_nested_attributes_for :variants
validates :title, presence: true
end
Run Code Online (Sandbox Code Playgroud)
我的第二个模特是
class Variant < ActiveRecord::Base
belongs_to :product
attr_accessible :price, :sku, :weight, :inventory_quantity, :product_id
end
Run Code Online (Sandbox Code Playgroud)
在我看来,我有
<%= form_for [:admin, @product], :html => {:multipart => true} do |f| %>
<%= render 'admin/shared/error_messages', object: f.object %>
<fieldset>
<legend>Producto Nuevo</legend>
<div class="control-group">
<%= f.label :title, 'Título', class: 'control-label' %>
<div class="controls">
<%= f.text_field :title %>
</div>
</div>
**<%= f.fields_for :variants …Run Code Online (Sandbox Code Playgroud) ruby-on-rails nested-attributes fields-for ruby-on-rails-3 ruby-on-rails-3.2
这是一个简单的问题,我有点惭愧地问,但是我一直在撞墙并在导轨3文档中导航而没有任何成功:/
所以,这是事情:
当我使用fields_for帮助程序时,它将生成的字段包装在<div class="fields"> ... </div>标记中.
所以,我的代码是
<ul class="block-grid two-up">
<%= f.fields_for :images do |image_builder| %>
<%= render "images/form", :f => image_builder %>
<% end %>
</ul>
Run Code Online (Sandbox Code Playgroud)
生成的html是:
<ul class="block-grid two-up">
<div class="fields">
<div>
<label for="company_images_attributes_0_image"> Image</label>
<input id="company_images_attributes_0_image"
name="company[images_attributes][0][image]" type="file">
</div>
</div>
<div class="fields">
<div>
<label for="company_images_attributes_1_image"> Image</label>
<input id="company_images_attributes_1_image"
name="company[images_attributes][1][image]" type="file">
</div>
</div>
</ul>
Run Code Online (Sandbox Code Playgroud)
我想要做的是将<div class="fields">包装器标签更改为<li>.
文档说您可以将选项传递给fields_for,但是不清楚您可以传递哪些选项,也许您可以更改此包装器标记?
可能是覆盖一个函数,有点像ActionView::Base.field_error_proc表单中的错误.
快速编辑:我忘了提到我正在使用simple_form生成此表单.我尝试在simple_form.rb配置文件中查找自定义方法,但我没有看到任何方法.
解决方案 经过进一步调查后,结果表明表单也使用了nested_form gem来生成表单(不仅仅是simple_form).这个生成器导致fields_for被包装在div标签中.谢谢大家的建议!
我有一个简单的模型
class Ad < ActiveRecord::Base
has_many :ad_items
end
class AdItem < ActiveRecord::Base
belongs_to :ad
end
Run Code Online (Sandbox Code Playgroud)
我有一个"广告/新"视图,向我显示创建新广告并向其添加一些项目的表单
.html.erb代码如下所示:
<% form_for @ad, do |ad_form| %>
<!-- some html -->
<% ad_form.fields_for :ad_items do |f| %>
<%= f.text_area "comment", :class => "comment", :rows => "5" %>
<% end %>
<!-- some other html -->
<% ad_form.fields_for :ad_items do |f| %>
<% render :partial => "detailed_item_settings", :locals => {:f => f} %>
<% end %>
<% end %>
Run Code Online (Sandbox Code Playgroud)
当广告有一个项目时......
def new
@ad = session[:user].ads.build …Run Code Online (Sandbox Code Playgroud) fields-for ×10
simple-form ×2
arrays ×1
form-for ×1
forms ×1
loops ×1
mongodb ×1
mongoid ×1
nested-forms ×1
ruby ×1
sorting ×1