我目前正在使用API,而不是数据库,我希望与ActiveRecord一样接近,所以我决定继续这样做,就像这里的railscast一样:http://railscasts.com/episodes/219-active-model
到目前为止,我的save方法运行良好,因此我可以将数据保存到API。我的问题是编辑,我的find方法似乎是问题......这是一些代码!
我的控制器中的编辑方法
def edit
@parking = Parking.find(params[:id])
end
整个模型
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
以下是我目前收到的错误:
undefined method `to_key' for Parking:Class
提取的来源(第1行):
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:)
谢谢!
修改
当我在我的控制器编辑方法中执行以下操作时:
def edit
@parking = Parking.new
@parking.name = "foo"
@parking.address = "foo"
@parking.city = "foo"
@parking.longitude = "foo"
@parking.latitude = "foo"
end
我的视图在每个字段中加载foo没有问题,所以问题是我必须对find方法做错了吗。)
答案 0 :(得分:4)
一个问题是你的find
方法是类方法(由于是'self.find'),这意味着它不能在类的实例上运行,因此不了解实例变量/方法,例如name
,address
等。
实现find
的更好方法是实例化Parking
的新实例,并填充它的变量,然后将其返回,例如。
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
方法中的某些内容会导致它。