我在视图中调试控制器中的变量,它向我展示了我希望看到的具有属性的对象:
--- !ruby/hash:Parse::Object
alternativeColour: false
collection: 1
colour: 2
favourite: false
gender: 2
image: !ruby/object:Parse::File
parse_filename: dcefd915-eee7-4203-840b-sdsdsd34refdd-image3.jpg
url: http://files.parse.com/erre43-7f16-479f-97e6-343434/dcefd-image3.jpg
price: 23.42
productType: 2
recommended: false
size: 6
title: Bomber Jacket
createdAt: '2014-04-03T20:33:41.020Z'
updatedAt: '2014-06-18T19:03:24.220Z'
objectId: yZkfeeNJPm
在我的控制器中,我有:
def edit
@garment = Parse::Query.new("Garments").eq("objectId", params[:id]).get.first
end
这会获取在另一个页面上单击的项目的objectId,并从parse.com数据库中获取匹配项目,以便我可以编辑任何我想要的内容。
现在我的编辑页面在没有我的表单的情况下加载正常,当我调试控制器var时,我复制并粘贴在它上面的第一段代码。所以我肯定知道我有一个返回的对象。
我甚至使用以下方法测试了一个小提示:
<%= debug @garment["title"] %>
这很好用。所以现在我希望添加我的表单然后创建文本字段的值并选择下拉菜单反映存储在数据库中的特定项目的内容。问题是我得到一个错误,指出:
undefined method `title' for #<Parse::Object:0x007fer0h02y5c0>
这是我的表单:
<%= form_for :garment, :url => adminpanel_url, :html => {:multipart => true} do |f| %>
<%= f.text_field :title, :class => "formFields", :placeholder => "Title" %>
<%= f.text_field :price, :class => "formFields", :placeholder => "Price" %>
<%= f.select :recommended, [["Yes", true], ["No", false]], :include_blank => "Make Recommended?" %>
<%= f.select :alternativeColour, [["Yes", true], ["No", false]], :include_blank => "Alternative Colour?" %>
<%= f.select :gender, [["Male", 1], ["Female", 2]], :include_blank => "Select Gender" %>
<%= f.select :productType, [["T-Shirt", 1], ["Shirt", 2], ["Hoody", 3], ["Gilet", 4], ["Jacket", 5]], :include_blank => "Select Product Type" %>
<%= f.select :size, [["Size 8", 1], ["Size 10", 2], ["Size 12", 3], ["Size 14", 8], ["Small", 4], ["Medium", 5], ["Large", 6], ["X-Large", 7]], :include_blank => "Select Product Size" %>
<%= f.select :colour, [["Black", 1], ["Blue", 2], ["Green", 3], ["Grey", 4], ["Navy", 5]], :include_blank => "Select Product Colour" %>
<%= f.select :collection, [["Tailor Made", 1], ["Raw & Uncut", 2], ["Custom", 3]], :include_blank => "Select Collecton" %>
<%= f.file_field :image %>
<%= f.file_field :image2 %>
<%= f.file_field :image3 %>
<%= f.file_field :image4 %>
<%= f.file_field :image5 %>
<%= f.file_field :image6 %>
<%= f.submit "Add Item", :id => "addItemButton" %> <br \>
<% end %>
根据我上面的调试结果,我认为我的表单可以正常工作,但它没有,我收到此错误:
undefined method `title' for #<Parse::Object:0x007fff0fedd1e0>
问题是什么?我已经做了一些谷歌搜索并查看了服务器日志,但似乎无法找到问题所在。一旦我删除表单,只是离开调试行,错误就消失了。所以错误肯定是我的形式造成的。
这是我的模型只是让你感到疑惑:
class Garment
include ActiveAttr::Model
#include ActiveModel::Validations
extend CarrierWave::Mount
attribute :alternativeColour
attribute :title
attribute :image
attribute :image2
attribute :image3
attribute :image4
attribute :image5
attribute :image6
attribute :price
attribute :recommended
attribute :gender
attribute :productType
attribute :size
attribute :colour
attribute :collection
mount_uploader :image, ImageUploader
帮助将非常感激。
感谢您的时间。
答案 0 :(得分:2)
在做我的原始答案之前......尝试更改控制器代码以实例化你的服装类:
def edit
@garment = Garment.new Parse::Query.new("Garments").eq("objectId", params[:id]).get.first
end
我查看了active_attr代码,如果 Parse::Query
正在返回一个哈希(看起来像是这样),它看起来会起作用。
旧答案
尝试将此添加到您的Garment
类定义中:
def method_missing(method_name, *args)
if self[method_name.to_s].present?
self[method_name.to_s]
else
super
end
end
您必须附加到此以使制定者正常工作。
这假设您的Parse::Query
调用在某个时刻实例化Garment
类。那会发生什么?
答案 1 :(得分:0)
更改:服装到实际对象,即
<%= form_for @garment, :url => adminpanel_url, :html => {:multipart => true} do |f| %>