如何获取ActiveRecord属性方法功能?我有这门课:
class PurchaseForm
include ActiveModel::Validations
include ActiveModel::Conversion
extend ActiveModel::Naming
attr_accessor :name,
:surname,
:email
validates_presence_of :name
validates_format_of :email, :with => /^[-a-z0-9_+\.]+\@([-a-z0-9]+\.)+[a-z0-9]{2,4}$/i
def initialize(attributes = {}, shop_name)
if not attributes.nil?
attributes.each do |name, value|
send("#{name}=", value)
end
end
def persisted?
false
end
end
Run Code Online (Sandbox Code Playgroud)
我需要做什么,有一个属性方法列出来自PurchaseForm对象的所有名称和值?
如果这是一个非常普遍和/或荒谬的问题,请道歉; 我发誓我已多次阅读文档,并且所有内容似乎都专注于ActiveRecord,以至于他们已经离开了除了创建或编辑模型数据之外的其他形式的路径.
例如,带有输入的表单可控制某些统计信息的提取和显示.rails为验证此表单的用户输入提供了什么,不会save在任何记录上调用?像:
:email 必须是电子邮件地址:num_products 必须是正整数:gender 必须是"M"或"F"之一:temperature 必须在-10到120之间等等(大多数Web框架标准的东西)......
Rails中有什么东西可以让我执行这个任意验证,还有一些查看辅助工具来显示错误列表,还是一切都与ActiveRecord相结合?
道歉,如果我的文档中忽略了这一点,但是这个和这个没有真正覆盖它,至少至于MT疲惫的眼睛可以告诉.
划痕头
感谢Rob的回答,这就是我想出的.我创建了一个实用程序类(恰当地命名Validator),它只是嵌入到我的控制器中,用于任何需要它的东西.
module MyApp
class Validator
include ActiveModel::Validations
include ActiveModel::Conversion
extend ActiveModel::Naming
def initialize(attributes = {})
super
attributes.each { |n, v| send("#{n}=", v) if respond_to?("#{n}=") }
end
end
end
Run Code Online (Sandbox Code Playgroud)
例如,现在在控制器中,只需定义一个内联类:
class LoginController < ApplicationController
class AuthenticationValidator < MyApp::Validator
attr_accessor :email
attr_accessor :password
validates_presence_of :email, :message => "E-mail is a required field"
validates_presence_of :password, :message => "Password cannot be …Run Code Online (Sandbox Code Playgroud) 作为Ruby on Rails新手,我理解"@"和":"引用有不同的含义.我在SO中看到了这篇文章,其中描述了一些差异.
我遇到了一个标准MVC页面的情况,类似于我的webapp中的所有其他表单/页面.
html.erb片段
<%= form_for @my_selection do |f| %>
Run Code Online (Sandbox Code Playgroud)
route.rb片段
resources :my_selections
Run Code Online (Sandbox Code Playgroud)
当我尝试访问此页面时,出现此错误:
NoMethodError in selections#create
Showing C:/somedir/myapp/app/views/my_selections/index.html.erb where line #16 raised:
undefined method `my_selection_index_path' for #<#<Class:0x1197e5676>:0x25439c3b>
Run Code Online (Sandbox Code Playgroud)
第16行是上面显示的表格摘要.
我在同一个Web应用程序中的所有其他表单/页面都以完全相同的方式设置并且工作正常.但是,一旦我将erb表单引用更改为:my_selection,此错误就消失了,我的页面运行正常.
问题:
我正在使用生成此类XML的系统:
<address>
<addressLine>123 Main Street</addressLine>
<addressLine>Suite 123</addressLine>
<city>Test City</city>
<stateOrProvince>AA</stateOrProvince>
<postalCode>00000</postalCode>
</address>
Run Code Online (Sandbox Code Playgroud)
两个addressLine元素应该是XStream隐式集合的一部分 - 我想调用一个getAddressLine()方法并获得一个List<String>输出.
我一直在使用XStream的教程,并且还没有弄清楚如何addressLine正确地映射元素.在XStream的Tweaking Output教程中有类似的用例,但没有提供示例代码:
另一个用例是集合,数组和映射.如果某个类的字段是这些类型之一,则默认情况下,其所有元素都嵌入在表示容器对象本身的元素中.通过与配置XStream的
XStream.addImplicitCollection(),XStream.addImplicitArray()以及XStream.addImplicitMap()方法,能够直接作为类的儿童和用于容器对象周围标签保持元件被省略.甚至可以为类声明多个隐式集合,数组或映射,但是必须可以区分这些元素以在反序列化时正确填充不同的容器.在以下示例中,表示服务器场的Java类型可能有两个容器,一个用于猫,一个用于狗:
Run Code Online (Sandbox Code Playgroud)<farm> <cat>Garfield</cat> <cat>Arlene</cat> <cat>Nermal</cat> <dog>Odie</dog> </farm>
但是,这个SO答案表明XStream场示例是不可能的.
我已经尝试过这个Java代码对我的Java代码进行单元测试,但还没有运气:
XStream xstream = new XStream(new StaxDriver());
xstream.alias("address", Address.class);
xstream.alias("addressLine", String.class);
xstream.addImplicitCollection(Address.class, "addressLines");
Address address = (Address) xstream.fromXML(
new FileInputStream("src/test/resources/addressTest.xml"));
Run Code Online (Sandbox Code Playgroud)
我应该尝试其他任何配置更改吗?
注意:我目前正在使用XStream v1.2.2.
在Rail模型中,当添加/更新记录时,是rails服务器或数据库服务器上每个时钟给出的时间戳?
如果var是EMAIL ADDRESS,Rails 3或Ruby是否有内置的方式来返回true或false?
例
1 returns false
dadadad@asdasd.net returns true
blah+asdasds@asdasd.net returns true
asdasdasdads returns false
Run Code Online (Sandbox Code Playgroud)
也许是这样的,如果1.is_a?电邮结束
谢谢
ruby validation ruby-on-rails email-validation ruby-on-rails-3
我认为问题来自于这是一个自定义模型.
错误:
undefined method `validates_presence_of' for Calculation:Class
Run Code Online (Sandbox Code Playgroud)
我的型号:
class Calculation
extend ActiveModel::Naming
include ActiveModel::Conversion
def persisted?
false
end
attr_accessor :name, :docket_num, :payments, :our_file_num,
:date_awarded, :date_paid, :amount_paid, :judgement_balance,
:results, :total_interest, :per_diem, :lda
validates_presence_of :date_awarded, :docket_num, :judgement_balance
Run Code Online (Sandbox Code Playgroud)
可能我需要包含或扩展以获得Rails验证?该项目属于铁路项目,但我手工构建了该模型.
有任何想法吗?
我尝试按照http://bcardarella.com/post/4668842452/exploring-rails-3-1-activemodel-securepassword使用rails 3.1 ActiveModel :: SecurePassword
我最后得到了红灯......
user.rb
class User < ActiveRecord::Base
has_secure_password
validates :password, :presence => { :on => :create }
end
Run Code Online (Sandbox Code Playgroud)
factory.rb
Factory.define :user do |f|
f.email "foo@bar.com"
f.password "foobar"
f.password_confirmation { |u| u.password }
end
Run Code Online (Sandbox Code Playgroud)
spec_user.rb
describe User do
it "should authenticate with matching username and password" do
user = Factory(:user, :email => 'frank@gmail.com', :password => 'secret')
User.authenticate('frank@gmail.com', 'secret').should == user
end
end
Run Code Online (Sandbox Code Playgroud)
我得到了红灯......
Failure/Error: user = Factory(:user, :email => 'frank@gmail.com', :password => 'secret')
NoMethodError:
undefined …Run Code Online (Sandbox Code Playgroud) authentication activerecord ruby-on-rails activemodel ruby-on-rails-3.1
activemodel ×5
ruby ×5
validation ×3
activerecord ×1
forms ×1
java ×1
timestamp ×1
xml ×1
xstream ×1