1

我在我的 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工作。

4

1 回答 1

0

代码表明,如果@merchant有一个名为 的属性name,则不会发生这种情况:

class Merchant

  include ActiveModel::Model

  # Add the awesomeness of Her gem
  include Her::Model

  attributes :name, :type

  validates :name, presence: true

end
于 2014-05-20T19:57:06.677 回答