虽然我知道这样做本身就不科学,但又不知道正确的做法,于是只好这样凑合来。
现在的问题是如果我留空提交,只会出来Rails的报错页面,而不会出现我写的<%= error_messages_for "xxx" %>这样的结果。
请问到底应该怎样做呢?
虽然,不是太懂你的问题。 :wink:
但是,我可以在一个view里,点击一次提交,验证两个model的属性。当然,提交的form也得,是写到两个model里了。
不能同时提示错误信息,但都能提示,效果如下:
[img]/upload/attachment/98394/ad07ae1a-c493-31a4-85f6-90251059023c.png[/img]
[img]/upload/attachment/98398/815131ca-13bf-3b8c-8fae-3deb0d9e9fc3.png[/img]
相关代码如下:
view:
[code="ruby"]<%= error_messages_for 'product' %>
<%= error_messages_for 'user' %>
Title
Name:
<%= text_field 'user', 'name' %>
Description
Image url
Price
<!--[eoform:product]-->[/code]
外层:
[code="ruby"]<% form_tag :action => 'create' do %>
<%= render :partial => 'form' %>
<%= submit_tag "Create" %>
<% end %>[/code]
conroller:
[code="ruby"] def create
@user = User.new(params[:user])
@product = Product.new(params[:product])
if @product.save && @user.save #这里有逻辑错误,如果product成功,user失败,product会保存。这部分留给你吧,毕竟你的问题不是这个。
flash[:notice] = 'Product was successfully created.'
redirect_to :action => 'list'
else
render :action => 'new'
end
end[/code]
model:
[code="ruby"]
class User < ActiveRecord::Base
validates_presence_of :name
validates_uniqueness_of :name
attr_accessor :password_confirmation
validates_confirmation_of :password
#....
class Product < ActiveRecord::Base
has_many :orders, :through => :line_items
has_many :line_items
def self.find_products_for_sale
find(:all, :order => "title")
end
validates_presence_of :title, :description, :image_url
[/code]
希望有帮助吧
楼上说的不错
但楼主请查看一下这个方法
error_message_on
一般的出错提示模式是这样
请注意form_for这个方法并不限定表单内的字段控件要和form_for指向同样的object
这一点楼上已经体现的很好(所以楼主说这样做不科学是错误的,rails2.3才支持嵌套表单,没有嵌套表单前,这就是做正统的方法)
你甚至可以用form_tag_for加text_field这样怪异的组合来做事情(不科学...)
另一种出错提示模式:
这种方式可能更适合楼主 毕竟跳两个红框框看起来别扭