[英]Rails 4 - Validate Model without a database
I've followed this tutorial and molding it as best I can for Rails 4. 我已经按照本教程进行了学习,并为Rails 4尽了最大努力。
http://railscasts.com/episodes/219-active-model?language=en&view=asciicast http://railscasts.com/episodes/219-active-model?language=en&view=asciicast
class Contact
include ActiveModel::Validations
include ActiveModel::Conversion
extend ActiveModel::Naming
validates :name, :email, :phone, :comment, :presence => true
def initialize(attributes = {})
attributes.each do |name, value|
send("#{name}=", value)
end
end
def persisted?
false
end
private
# Using a private method to encapsulate the permissible parameters is just a good pattern
# since you'll be able to reuse the same permit list between create and update. Also, you
# can specialize this method with per-user checking of permissible attributes.
def contact_params
params.require(:contact).permit(:name, :email, :phone, :comment)
end
end
In my Controller: 在我的控制器中:
class ContactController < ApplicationController
def index
@contact = Contact.new
end
def create
@contact = Contact.new(params[:contact])
if @contact.valid?
# Todo send message here.
render action: 'new'
end
end
end
And in my View: 在我看来:
<%= form_for @contact do |f| %>
<%= f.label :name %>:
<%= f.text_field :name %><br />
<%= f.label :email %>:
<%= f.text_field :email %><br />
<%= f.submit %>
<% end %>
I'm getting this exception message: 我收到以下异常消息:
undefined method `name' for #<Contact:0x007fd6b3bf87e0>
you have to declare them as attributes. 您必须将它们声明为属性。
attr_accessor :name, email, :phone, :comment attr_accessor:名称,电子邮件,:电话,:评论
you can use the ActiveAttr gem: https://github.com/cgriego/active_attr 您可以使用ActiveAttr gem: https : //github.com/cgriego/active_attr
Rails Cast Tutorial: http://railscasts.com/episodes/326-activeattr Rails Cast教程: http : //railscasts.com/episodes/326-activeattr
Example: 例:
class Contact
include ActiveAttr::Model
attribute :name
attribute :email
attribute :phone
attribute :comment
validates :name, :email, :phone, :comment, :presence => true
end
PS: I know, it's an old question, but this can help someone. PS:我知道,这是一个老问题,但这可以帮助某人。
It's actually simpler in Rails 4 and up: use ActiveModel::Model instead like so: 在Rails 4及更高版本中,它实际上更简单:像下面这样使用ActiveModel :: Model :
class Contact
include ActiveModel::Model
attr_accessor :name, :email, :phone, :comment
validates :name, :email, :phone, :comment, :presence => true
end
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.