标签: fields-for

使用fields_for的动态内容

我有一个使用has_many关系的嵌套表单.在我的表单视图中,我使用部分字段输入并传递FormBuilder对象.

form.html.haml:

- form_for @record do |f|
  .field
    = container do
      - f.fields_for :strings do |s|
        = render :partial => 'string_fields', :locals => {:s => s}
Run Code Online (Sandbox Code Playgroud)

_string_fields.html.haml:

= s.hidden_field :id
= s.hidden_field :language_id

.field
  %h3
    = t(:name)
  = s.text_field :name, :size => 50

.field
  %h3
    = t(:description)
  = s.text_area :description, :rows => 6
Run Code Online (Sandbox Code Playgroud)

这应该工作; 但是,我想在AJAX中添加功能以使用RJS动态添加另一组字段,当我尝试通过RJS渲染部分时,显然s没有定义(我不知道我通过了什么:locals哈希值).

有没有办法将字段动态地添加到由定义的字段集中fields_for,或者我是否必须重新实现我的部分而不使用帮助程序?

ruby-on-rails partials fields-for

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

Rails - fields_for不工作?

当我运行rails服务器并转到我网站上的学校/新页面时,会出现标有"学校"标签的字段,我可以在其中输入学校的名称,但是field_for下的所有其他字段用于输入学校管理员的信息不要出现在我的网站上 - 当我在我的表格上使用"检查元素"时,就好像他们甚至不在那里.他们为什么不出现在我的页面上?

<%= form_for(@school) do |f| %>
  <% if @school.errors.any? %>
    <div id="error_explanation">
      <h2><%= pluralize(@school.errors.count, "error") %> prohibited this school from being saved:</h2>

      <ul>
      <% @school.errors.full_messages.each do |msg| %>
        <li><%= msg %></li>
      <% end %>
      </ul>
    </div>
  <% end %>

  <div class="field">
    <%= f.label :school %><br />
    <%= f.text_field :name %>
  </div>
  <%= f.fields_for :admin do |f2| %>
    <div class="field">
      <%= f2.label "administrator name" %><br />
      <%= f2.text_field :name %>
    </div>
    <div class="field">
      <%= f2.label "administrator email" %><br /> …
Run Code Online (Sandbox Code Playgroud)

fields-for ruby-on-rails-3

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

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

Rails 4.0和Cocoon:fields_for下的嵌套字段不会出现在Edit中

希望有人可以在这里建议修复.我对Rails相当新,并探索Rails 4.0中的变化.我在Rails 4.0中构建了这个简单的食谱书应用程序.我有食谱的主要模型(名称,cook_time,oven_temp,说明等).因为一些食谱可能有5种成分而其他食谱可能有20种,我想在一个带有has_many关联的单独模型中打破成分.所以食谱has_many成分和accepts_nested_attributes_for:成分.以下是模型:

recipe.rb

class Recipe < ActiveRecord::Base
  belongs_to :user
  belongs_to :category
  has_many :ingredients, :dependent => :destroy

  validates :name, presence: true, length: { maximum: 50 }

  accepts_nested_attributes_for :ingredients, 
                :reject_if => lambda { |a| a[:name].blank? },
                            :allow_destroy => true
end
Run Code Online (Sandbox Code Playgroud)

ingredient.rb

class Ingredient < ActiveRecord::Base
  belongs_to :recipe
end
Run Code Online (Sandbox Code Playgroud)

提醒:Rails 4.0不再使用attr_accessible,而是使用强params将赋值移动到控制器中.

recipes_controller.rb

class RecipesController < ApplicationController
  before_action :find_recipe, only: [:show, :edit, :update, :destroy]
  before_action :set_current_user, except: [:index, :show]
  respond_to :html, :js

  ...

  def edit
  end

  def update
    if @recipe.update_attributes(recipe_params)
      redirect_to @recipe
    else …
Run Code Online (Sandbox Code Playgroud)

gem nested-attributes fields-for ruby-on-rails-4 cocoon-gem

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

有条件的 rails 字段

我正在显示一个案例的一些联系人。问题是我想把它们分成几组。

客户 ...列出客户 前律师 ...列出前律师 反对方 ...列出反对方

    <% current_account.roles.each do |role| %>
      <%= f.fields_for :case_contacts, f.object.case_contacts.order(:role) do |builder| %>
        <% if builder.object.role == role %>
          <%= render partial: 'contact_fields', locals: { f: builder, edit: edit } %>
        <% end %>
      <% end %>
    <% end %>
Run Code Online (Sandbox Code Playgroud)

所以这有效,只是它在我的 html 中留下了空的 div.fields。

有没有办法将条件放在 fields_for 语句中

    <%= f.fields_for :case_contacts, f.object.case_contacts.order(:role), if f.object.role = role do |builder| %>
Run Code Online (Sandbox Code Playgroud)

我知道这个例子是错误的。

而且,实际上,我可以不用 fields_for 一起生成的 div.fields

编辑:如果 fields_for 只显示 builder.object.role = role 的字段,我想我什至不需要订购它

ruby field ruby-on-rails fields-for

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

如何使用fields_for"parents []"获取正确的子ID,父对象| f | 使用f.fields_for:孩子,孩子?

我正在一个表单的索引视图中编辑父模型的多个实例,如Railscasts#198.每个父母has_many:children和accepts_nested_attributes_for:children,如Railscasts#196和#197

<%= form_tag %>
  <% for parent in @parents %>
    <%= fields_for "parents[]", parent do |f|
      <%= f.text_field :job %>
      <%= f.fields_for :children do |cf| %>
         <% cf.text_field :chore %>
      <% end %> 
    <% end %> 
  <% end %> 
<% end %>  
Run Code Online (Sandbox Code Playgroud)

给定parent.id == 1
f.text_field:作业正确生成

<input id="parents_1_job" type="text" value="coding" size="30" name="parents[1][job]">  
Run Code Online (Sandbox Code Playgroud)

但是cf.text_field:chore生成的id和没有父索引的名称.

id="parents_children_attributes_0_chore"  
name="parents[children_attributes][0][chore]"    
Run Code Online (Sandbox Code Playgroud)

如果我尝试将特定的子对象传递给f.fields_for,如下所示:

<% for child in parent.children %>
  <%= f.fields_for :children, child do |cf| %>
    <%= cf.text_field :chore %>
  <% end %>
<% end %>  
Run Code Online (Sandbox Code Playgroud)

我得到了同样的结果.如果我改变方法:从孩子到"[]孩子",我得到了 …

fields-for ruby-on-rails-3

2
推荐指数
1
解决办法
3080
查看次数

避免使用fields_for将单个记录添加到关联模型

我有以下协会:

class Developer < ActiveRecord::Base
  has_many :large_photos, :class_name => 'Photo', :conditions => { :large => true }, :reject_if => proc { |x| x['image'].blank? }
end

class Photo < ActiveRecord::Base
  belongs_to :developer
  mount_uploader :image, ImageUploader # Carrierwave
end
Run Code Online (Sandbox Code Playgroud)

现在,我正在寻找一个开发表单,在提交时,将添加一个文件字段来上传新表单Photo.目前我有:

<%= form_for @developer do |form| %>

    <%= form.fields_for :large_photos do |sf| %>
    <div class="dropzone">
        <%= sf.file_field :image %>
        <%= sf.hidden_field :large, :value => '1' %>
        <%= sf.hidden_field :image_cache %>
    </div>
    <% end %>

<% end%>
Run Code Online (Sandbox Code Playgroud)

现在,我fields_for遇到的问题是循环现有的记录(当然是!),我宁愿避免,我只想添加一个文件字段来上传新照片.我该怎么做?

forms ruby-on-rails associations fields-for

2
推荐指数
1
解决办法
1127
查看次数

Ruby on Rails fields_for在编辑操作上生成太多字段

我有一个真正的野兽形式,基本上是一个五页的销售形式,当创建一个新的形式一切都很好.但是当你去编辑新表格时,它会复制字段和值四次,有时甚至是7次.我不知道编辑操作是如何工作的,它使用与新操作使用的相同的部分形式.但这是我的控制器操作新的和编辑操作.

此外,复制不会发生在每个字段中,似乎只发生在存在has_many关系的部分.

  # GET /references/new
  # GET /references/new.json
  def new
    @reference = Reference.new
    @user_id = params[:user_id]
    @reference.build_customer_overview
    @reference.build_solution_description
    @reference.solution_description.deal_details.build
    component = @reference.components.build
    component.servers.build
    component.services.build
    partner = @reference.build_partner
    partner.competitors.build
    partner.contacts.build
    respond_to do |format|
      format.html # new.html.erb
      format.json { render json: @reference }
    end
  end

  # GET /references/1/edit
  def edit
    @reference = Reference.find(params[:id])
    @user_id = @reference.user_id
  end
Run Code Online (Sandbox Code Playgroud)

我只是不知道它为什么会在编辑操作上生成额外的字段,希望有更多铁路经验的人知道这种行为.

谢谢!

编辑:

以下是每个红宝石块渲染4次的表单部分.

  <%= f.fields_for :deal_details do |ff| %>
    <div>
      <%= ff.label :title, 'Customer\'s business/IT needs (why was this solution required)' %> …
Run Code Online (Sandbox Code Playgroud)

forms controller ruby-on-rails fields-for

2
推荐指数
1
解决办法
2182
查看次数

不工作的领域有很多协会

我目前正在为模型构建表单,并且无法为表单开发相关的模型表单.

我收到的错误:

undefined method `tradie_id' for #<ActiveRecord::Associations::CollectionProxy::ActiveRecord_Associations_CollectionProxy_TradieCategory:0xd0f9d78>
Run Code Online (Sandbox Code Playgroud)

表单代码如下:

= form_for @data[:tradie], url: { action: "update_tradie" } do |tradie|

  # This doesn't work
  = tradie.fields_for :tradie_categories, @data[:tradie].tradie_categories do |category|
    = category.text_field :tradie_id

  # However this fields_for does
  = tradie.fields_for :tradie_locations, @data[:tradie].tradie_locations do |location|
    = location.text_field :address
Run Code Online (Sandbox Code Playgroud)

Tradie模型具有has_many与关系TradieCategory模型和TradieCategory模型具有belongs_to与关系Tradie.我还验证了TradieCategory有一个字段tradie_id.

在上面的表单中,@data[:tradie]等于Tradie模型的实例.每当我打电话tradie_categoriestradie_locations他们呼吁的相关模型数据TradieCategoryTradieLocation.

最后,在我的视图代码中,如果我运行= @data[:tradie].tradie_categories.to_a,我会在我的html页面上返回

[#<TradieCategory …
Run Code Online (Sandbox Code Playgroud)

forms ruby-on-rails associations fields-for ruby-on-rails-4

2
推荐指数
1
解决办法
1195
查看次数

具有嵌套 fields_for 的表单,可保存到多个记录

我有三个模型, companiestransactionssubtransactions。每个都有很多下一个。我需要构建一个保存transactionssubtransactions.

我正在努力寻找表单的最佳方法以及保存到数据库的适当方法。理想情况下,如果所有记录都通过验证,则立即保存记录。

我的简化形式:

<%= form_for(@transaction) do |f| %>
  <div class="field" id="transaction_amount">
    <%= f.label :total %><br>
    <%= f.text_field :total %>
  </div>

    <% 1.upto(5) do |i| %>
          <%= fields_for("subtransaction[#{i}]") do |s| %>
              <div class="field" id="subtotal_amount">
                <%= s.label :subtotal, "Subtotal #{i}" %><br>
                <%= s.text_field :subtotal %>
              </div>
          <% end %>
    <% end %>  
<% end %>
Run Code Online (Sandbox Code Playgroud)

我的交易控制器:

def new
    @transaction = company.transactions.build if logged_in?
end

def create
    @transaction = company.transactions.build(transaction_params)

    params[:subtransaction].each …
Run Code Online (Sandbox Code Playgroud)

forms parameters ruby-on-rails associations fields-for

2
推荐指数
1
解决办法
5129
查看次数