我在我的rails应用中使用她的 gem来从Web服务后端而不是数据库中获取数据。这个问题与宝石完全无关,尽管我相信这一点。
我的模特正在使用ActiveModel
class Merchant
include ActiveModel::Model
# Add the awesomeness of Her gem
include Her::Model
attr_accessor :name, :type
validates :name, presence: true
end
我的控制器是
def create
@merchant = Merchant.new(params[:merchant])
if @merchant.valid?
respond_to do |format|
if @merchant.save
format.html { redirect_to @merchant, notice: 'Merchant was successfully created.' }
format.json { render :show, status: :created, location: @merchant }
else
format.html { render :new }
format.json { render json: @merchant.errors, status: :unprocessable_entity }
end
end
else
render :new
end
end
我的视图中有一个表格,如此
<%= form_for(@merchant) do |f| %>
<%= f.label :name, "First Name" %>
<%= f.text_field :name %>
<%= f.label :type, "Type" %>
<%= f.text_field :type %>
<div class="actions">
<%= f.submit %>
</div>
<% end %>
现在,模型中需要attr_accessor :name, :type
才能使表单正常运行或抛出此错误
undefined method `name' for #<Merchant(merchants) >
如果我在模型中添加attr_accessor
,则@merchant.attributes
将返回{}
。
这导致gem向服务器发送空白请求,因为gem使用attributes
来构建请求。我检查了宝石的来源。
如果我不添加attr_accessor
,那么除了表单引发错误外,一切正常。
修复此错误的方法是什么。说实话,我并不清楚attributes
如何工作。
答案 0 :(得分:0)
code表示如果@merchant
有一个名为name
的属性,则不会发生这种情况:
class Merchant
include ActiveModel::Model
# Add the awesomeness of Her gem
include Her::Model
attributes :name, :type
validates :name, presence: true
end