我现在使用的是API,而不是数据库,我想和ActiveRecord一样接近,所以我决定继续做,就像这里的http://railscasts.com/episodes/219-active-model一样
到目前为止,我的保存方法运行良好,所以我可以将数据保存到API中。我的问题是编辑,我的查找方法似乎是问题.这是一些代码!
我的控制器中的编辑方法
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方法做错误的事情:)
发布于 2012-03-05 06:19:53
一个问题是,您的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方法中的某些东西导致了这种情况。
https://stackoverflow.com/questions/9561844
复制相似问题