是否可以嵌套像这样的html表单
<form name="mainForm">
<form name="subForm">
</form>
</form>
Run Code Online (Sandbox Code Playgroud)
这两种形式都有效吗?我的朋友遇到了这个问题,这是subForm作品的一部分,而另一部分却没有.
使用accepts_nested_attributes_for时如何编辑连接模型的属性?
我有3个模型:由连接器加入的主题和文章
class Topic < ActiveRecord::Base
has_many :linkers
has_many :articles, :through => :linkers, :foreign_key => :article_id
accepts_nested_attributes_for :articles
end
class Article < ActiveRecord::Base
has_many :linkers
has_many :topics, :through => :linkers, :foreign_key => :topic_id
end
class Linker < ActiveRecord::Base
#this is the join model, has extra attributes like "relevance"
belongs_to :topic
belongs_to :article
end
Run Code Online (Sandbox Code Playgroud)
所以当我在主题控制器的"新"动作中构建文章时......
@topic.articles.build
Run Code Online (Sandbox Code Playgroud)
...并在topics/new.html.erb中创建嵌套表单...
<% form_for(@topic) do |topic_form| %>
...fields...
<% topic_form.fields_for :articles do |article_form| %>
...fields...
Run Code Online (Sandbox Code Playgroud)
... Rails自动创建链接器,这很棒. 现在我的问题是:我的链接器模型还具有我希望能够通过"新主题"表单更改的属性.但是Rails自动创建的链接器除了topic_id和article_id之外,其所有属性都有nil值.如何将其他链接器属性的字段放入"新主题"表单中,这样它们就不会出现?
在我的第一个rails应用程序中,我正在尝试使用form_for并fields_for创建嵌套对象表单.到目前为止一直很好,但我无法弄清楚如何在fields_for块中访问子对象.我已经在子对象中预先填充了一个字段,其中包含我想在用户指令中显示的数据.
车库模型
:
has_many :cars, :dependent => :destroy
accepts_nested_attributes_for :cars
Run Code Online (Sandbox Code Playgroud)
汽车:
belongs_to :garage
Run Code Online (Sandbox Code Playgroud)
车库控制器
def new
@garage = Garage.new
for i in 1..5
@garage.cars.build :stall_number => i
end
end
Run Code Online (Sandbox Code Playgroud)
_form.html.erb
<%= form_for @garage do |f| %>
<%= f.label :title, "Garage Name" %><br />
<%= f.text_field :title %>
<% f.fields_for :cars do |builder| %>
<p>Enter license for car parked in stall: <%= car.stall_number %></p>
<%= f.label :license, "License #:" %><br />
<%= f.text_field :license …Run Code Online (Sandbox Code Playgroud) 我想在另一个集合类型中包含一个集合类型.它应该如下所示:
只使用一个集合工作正常,但我需要编辑外部表单的原型,因此它为每一行呈现内部表单的原型.
任何想法我怎么能这样做?还有什么是最好的保存方式
编辑:现在我正在尝试渲染嵌套表单的原型:
<ul class="characteristics-container" data-prototype="{{ form_widget(form.characteristics.vars.prototype)|e }}" data-prototype-options="{{ form_widget(form.characteristics.options.vars.prototype|e ) }}">
{# iterate over each existing tag and render its only field: name #}
{% for characteristic in form.characteristics %}
<li>{{ form_row(characteristic.name) }}</li>
<div class="characteristics-options">
{% for opt in form.characteristics.options %}
{% endfor %}
</div>
{% endfor %}
</ul>
Run Code Online (Sandbox Code Playgroud)
它给出了错误 form_widget(form.characteristics.options.vars.prototype|e
Method "options" for object "Symfony\Component\Form\FormView" does not exist in
Run Code Online (Sandbox Code Playgroud)
我尝试了特征[0],它说密钥不存在
这是我的表单类:
PromotionType(基本形式)
$builder
->add('characteristics','collection', array(
'label' => 'Caracteristicas',
'type' => new PromotionCharacteristicType(),
'allow_add' => true,
'allow_delete' => …Run Code Online (Sandbox Code Playgroud) 最后转移到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) 我们都看到了辉煌的复杂形式railscast,其中Ryan Bates解释了如何使用Javascript在父对象表单中动态添加或删除嵌套对象.
有没有人对如何修改这些方法以便与Haml Formtastic合作有任何想法?
在这里添加一些上下文是我目前面临的问题的简化版本:
#教师表格(有嵌套的主题表格)[来自我的申请]
- semantic_form_for(@teacher) do |form|
- form.inputs do
= form.input :first_name
= form.input :surname
= form.input :city
= render 'subject_fields', :form => form
= link_to_add_fields "Add Subject", form, :subjects
Run Code Online (Sandbox Code Playgroud)
#个人主题形式部分[来自我的申请]
- form.fields_for :subjects do |ff|
#subject_field
= ff.input :name
= ff.input :exam
= ff.input :level
= ff.hidden_field :_destroy
= link_to_remove_fields "Remove Subject", ff
Run Code Online (Sandbox Code Playgroud)
#Application Helper(直接来自Railscasts)
def link_to_remove_fields(name, f)
f.hidden_field(:_destroy) + link_to_function(name, "remove_fields(this)")
end
def link_to_add_fields(name, f, association)
new_object = f.object.class.reflect_on_association(association).klass.new
fields = f.fields_for(association, …Run Code Online (Sandbox Code Playgroud) 我有一个用户和个人资料模型.一个用户可以拥有许多配置文件 在用户创建过程中,我只需要在我的用户模型中访问配置文件部分中的一个信息(即电话号码).因此,我正试图通过它完成它attr_accessible.我的user.rb看起来像这样.
has_many :profiles
attr_accessible :handle, :email, :password, :profile_mobile_number
attr_accessor : :profile_mobile_number
Run Code Online (Sandbox Code Playgroud)
我面临的问题是,当我尝试在user.rb中的方法中调用getter方法profile_mobile_number时(该方法是私有的,虽然我认为无所谓),但我得到一个空值.我在users/new.html.erb表单中使用以下内容
我的问题是这样做的正确方法是什么?我应该使用<% f.fields_for :profile do |ff| -%>或<% f.fields_for :profiles do |ff| -%>(注意第二个是复数).当我使用复数:配置文件时,我甚至看不到表单上的字段.我在这里错过了什么?什么是需要在模型user.rb中使用的时态?:profile_phone_number或:profiles_phone_number?谢谢.
我刚刚加入has_many :through联盟.我试图实现保存所有3个表数据(的能力Physician,Patient通过一个单一的形式和关联表).
class CreatePhysicians < ActiveRecord::Migration
def self.up
create_table :physicians do |t|
t.string :name
t.timestamps
end
end
end
class CreatePatients < ActiveRecord::Migration
def self.up
create_table :patients do |t|
t.string :name
t.timestamps
end
end
end
class CreateAppointments < ActiveRecord::Migration
def self.up
create_table :appointments do |t|
t.integer :physician_id
t.integer :patient_id
t.date :appointment_date
t.timestamps
end
end
end
Run Code Online (Sandbox Code Playgroud)
class Patient < ActiveRecord::Base
has_many :appointments
has_many :physicians, :through => :appointments
accepts_nested_attributes_for :appointments
accepts_nested_attributes_for :physicians
end
class Physician …Run Code Online (Sandbox Code Playgroud) 我有一个django嵌套管理员表单,下面的代码是我的admin.py文件内容:
# -*- coding:utf-8 -*-
from django.db.models import Q
from django import forms
from django.contrib.auth.admin import UserAdmin as AuthUserAdmin
from django.contrib import admin
from django.contrib.auth.forms import UserCreationForm, UserChangeForm
from django.contrib.auth.hashers import UNUSABLE_PASSWORD_PREFIX, identify_hasher
from django.forms.utils import flatatt
from django.utils.html import format_html
from django.utils.safestring import mark_safe
from django.utils.translation import ugettext as _, ugettext
from django.contrib.auth.models import Group, Permission
from nested_admin.nested import NestedStackedInline, NestedModelAdmin
from HomeMakers.apps.system.models import Dependant, Benefit, User, \
Unit, Stack, Parking
from mtools.fields import UniqueValueWidget, PersianDateField
class …Run Code Online (Sandbox Code Playgroud) 我有一个项目资源,有很多任务.我想确保每个任务都有一个project_id添加validates_presence_of :project_id到任务模型.
但是,在使用任务创建新项目时,在记录保存之前,project_id将不可用,因此我无法使用validates_presence_of :project_id.
所以我的问题是,如何在任务模型中验证project_id的存在?我想确保每个任务都有父母.
...
class Project < ActiveRecord::Base
has_many :tasks, :dependent => :destroy
accepts_nested_attributes_for :tasks, :allow_destroy => true
Run Code Online (Sandbox Code Playgroud)
...
class Task < ActiveRecord::Base
belongs_to :project
validates_presence_of :project_id
Run Code Online (Sandbox Code Playgroud) nested-forms ×10
forms ×2
django ×1
django-admin ×1
fields-for ×1
formtastic ×1
html ×1
javascript ×1
join ×1
models ×1
nested ×1
prototype ×1
python ×1
ruby ×1
symfony ×1
validation ×1