小编JW8*_*JW8的帖子

ActiveModel属性

如何获取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对象的所有名称和值?

ruby ruby-on-rails activemodel ruby-on-rails-3

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

Rails 3:显示表单的验证错误(不保存ActiveRecord模型)

如果这是一个非常普遍和/或荒谬的问题,请道歉; 我发誓我已多次阅读文档,并且所有内容似乎都专注于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 forms validation ruby-on-rails activemodel

5
推荐指数
1
解决办法
2263
查看次数

Ruby - 区别:变量和@variable

作为Ruby on Rails新手,我理解"@"和":"引用有不同的含义.我在SO中看到了这篇文章,其中描述了一些差异.

  1. @表示实例变量(例如,@ my_selection)
  2. :表示别名(例如:my_selection)

我遇到了一个标准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,此错误就消失了,我的页面运行正常.

问题:

  1. 我对my_selections和@my_selections之间区别的理解是否正确?
  2. 为什么要切换到:my_selection解决我的原始错误?

ruby ruby-on-rails-3

5
推荐指数
1
解决办法
4289
查看次数

XStream隐式集合配置问题

我正在使用生成此类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类型可能有两个容器,一个用于猫,一个用于狗:

<farm>
  <cat>Garfield</cat>
  <cat>Arlene</cat>
  <cat>Nermal</cat>
  <dog>Odie</dog>
</farm>
Run Code Online (Sandbox Code Playgroud)

但是,这个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.

java xml xstream

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

ActiveModel时间戳字段:时间戳来自哪里?

在Rail模型中,当添加/更新记录时,是rails服务器或数据库服务器上每个时钟给出的时间戳?

timestamp ruby-on-rails activemodel

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

Ruby,Rails - 如何检查var是否是电子邮件

如果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

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

为自定义attr_accessor获取未定义的方法`validates_presence_of'

我认为问题来自于这是一个自定义模型.

错误:

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验证?该项目属于铁路项目,但我手工构建了该模型.

有任何想法吗?

ruby validation ruby-on-rails activemodel

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

ActiveModel :: SecurePassword未定义方法`password_digest ='

我尝试按照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

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