ruby on rails - undefined方法有效吗?

时间:2013-08-11 03:17:51

标签: ruby-on-rails ruby ruby-on-rails-3

我跟随ryan bates屏幕演示如何http://railscasts.com/episodes/219-active-model如何验证没有数据库的表单

但我一直认为未定义的方法有效吗?

继承我的控制器

def create
  @contacts = FreshDeskApiWrapper.new().post_tickets(params[:contacts])
  if @contacts.valid?
    redirect_to new_contact_path 
  else
   flash[:notice] = "OOps"
   render action: 'new'
 end

我似乎可以打电话

 $ FreshDeskApiWrapper.new().valid?

在控制台中运行得很好,但是当我点击

时它似乎并不喜欢它
 $ FreshDeskApiWrapper.new().post_tickets(params[email: 'user@example.com']).valid?

我得到一个有效的未定义方法?

有些东西我对此不了解

继承我在模特文件夹中创建的fresh_desk_api_wrapper.rb文件

  class FreshDeskApiWrapper
  include ActiveModel::Validations
  include ActiveModel::Conversion
  extend ActiveModel::Naming

  attr_accessor :config, :client, :subject, :email, :custom_field_phone_number_50754,      :custom_field_company_50754, :description
  validates :subject, presence: true   
  validates :email, presence: true  
  validates_format_of :email, :with => /^[-a-z0-9_+\.]+\@([-a-z0-9]+\.)+[a-z0-9]{2,4}$/i

  def initialize(attributes = {})
    attributes.each do |name, value|
    send("#{name}=", value)
  end
  self.config = YAML.load_file("#{Rails.root}/config/fresh_desk.yml")[Rails.env]
  self.client = Freshdesk.new(config[:url], config[:api_key], config[:password])
  end

  def post_tickets(params)
    client.post_tickets(params)
  end

  def persisted?
    false
  end
end

post_tickets是我在那里定义的东西

3 个答案:

答案 0 :(得分:3)

您可以在对象的单个实例上调用valid?,而不是多个。 @contacts意味着您的post_tickets方法正在返回多个对象。

答案 1 :(得分:2)

尝试这样的事情:

@contacts = FreshDeskApiWrapper.new(post_tickets(params [:contacts])

似乎问题是你添加dosnt的方法返回一个活动的记录对象,所以方法有效吗?不可用

编辑:

也许这个:

@contacts = FreshDeskApiWrapper.new(FreshDeskApiWrapper.post_tickets(params [:contacts])

答案 2 :(得分:0)

我非常愚蠢,所以我做的是

  def create

  @contacts = FreshDeskApiWrapper.new(params[:contacts])
  @contacts.post_tickets(params[:contacts])
  if @contacts.valid?
    redirect_to new_contact_path 
  else
   flash[:notice] = "OOps"
   render action: 'new'
  end
end

它有效!

我仍在努力学习这一切.....感谢你的帮助,这真的有帮助