首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rails中不工作的Self.find方法主动模型

Rails中不工作的Self.find方法主动模型
EN

Stack Overflow用户
提问于 2012-03-05 04:59:40
回答 1查看 4.5K关注 0票数 3

我现在使用的是API,而不是数据库,我想和ActiveRecord一样接近,所以我决定继续做,就像这里的http://railscasts.com/episodes/219-active-model一样

到目前为止,我的保存方法运行良好,所以我可以将数据保存到API中。我的问题是编辑,我的查找方法似乎是问题.这是一些代码!

我的控制器中的编辑方法

代码语言:javascript
复制
  def edit
    @parking = Parking.find(params[:id])
  end

全模型

代码语言:javascript
复制
class Parking
  include ActiveModel::Validations
  include ActiveModel::Conversion
  extend  ActiveModel::Naming

  attr_accessor :name, :address, :city, :longitude, :latitude, :contributor_name, :contributor_email

  validates_presence_of :name, :address, :city, :longitude, :latitude

  def initialize(attributes = {})
    attributes.each do |name, value|
      send("#{name}=", value)
    end
  end

  def self.find(id)
    parking           = Parse.get("Parking", id.to_s) // API Call

    name              = parking["name"]
    address           = parking["address"]
    city              = parking["city"]
    longitude         = parking["location"]["longitude"]
    latitude          = parking["location"]["latitude"]
    contributor_name  = parking["contributorName"]
    contributor_email = parking["contributorEmail"]

    return self
  end

  def save
    if (!valid?)
      return false
    else
      parking = Parse::Object.new("Parking")

      data =
      {
        :longitude => 40.0,
        :latitude  => -30.0
      }

      point = Parse::GeoPoint.new(data)

      parking["location"]         = point
      parking["name"]             = name
      parking["address"]          = address
      parking["city"]             = city
      parking["contributorName"]  = contributor_name
      parking["contributorEmail"] = contributor_email

      if (parking.save)
        return true
      end
    end
  end

  def persisted?
    false
  end
end

,这是我目前得到的错误:

代码语言:javascript
复制
undefined method `to_key' for Parking:Class

提取的源(围绕第1行):

代码语言:javascript
复制
1: <%= form_for(@parking, :html => { :class => "form-horizontal"}) do |f| %>
2:   <% if @parking.errors.any? %>
3:     <div class="alert alert-error fade in">
4:       <a class="close" data-dismiss="alert">×</a>**

如果有人提出建议,我真的愿意接受任何想法,我从rails开始:)

谢谢!

编辑:

当我在控制器编辑方法中这样做时,如下所示:

代码语言:javascript
复制
  def edit
    @parking = Parking.new
    @parking.name              = "foo"
    @parking.address           = "foo"
    @parking.city              = "foo"
    @parking.longitude         = "foo"
    @parking.latitude          = "foo"   
  end

我的视图在每个字段中都加载foo没有问题,所以问题是,我一定是在使用find方法做错误的事情:)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-03-05 06:19:53

一个问题是,您的find方法是类方法(由于是'self.find'),这意味着它不对类的实例进行操作,因此不了解实例变量/方法,例如nameaddress等。

实现find的一个更好的方法是实例化一个新的Parking实例,并填充它的变量,然后返回它。

代码语言:javascript
复制
def self.find(id)
   raw = Parse.get("Parking", id.to_s)

   parking = Parking.new
   parking.name = raw["name"]
   #  etc for the others

   parking # Return the newly-created instance
end

这并不能解释您当前所看到的“未定义的方法”,您可能需要提交更多的详细信息才能得到答案,特别是从异常中得到完整的回溯,以查看哪些代码实际上正在引发它。从您提供的信息来看,我猜想是Parse.get方法中的某些东西导致了这种情况。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9561844

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档