【问题标题】:ActiveResource NoMethodError when using 'new' action without schema in RoR在 RoR 中使用没有架构的“新”操作时出现 ActiveResource NoMethodError
【发布时间】:2013-06-25 11:06:26
【问题描述】:

如果没有在我的 RoR ActiveResource 模型中定义模式,我无法添加“新”RESTful 实体,即使我已经阅读了这是可选的。省略架构时(为了清楚起见,我将其包含在下面的代码中),我收到以下错误:

NoMethodError in Pages#new

undefined method `author' for #<Page:0x4823dd8>

当我包含该方案时,一切都按预期工作。我真的不想每次更改时都跟踪架构,而且我已经看到了不需要它的示例。其他 RESTful 动词(读取、更新和删除)都可以在没有该方案的情况下工作。我哪里错了?我使用rails generate scaffold 来创建脚手架,如果这很重要的话。


控制器:

class PagesController < ApplicationController

  around_filter :shopify_session, :except => 'welcome'

...snip...

  def new
    @page = Page.new

    respond_to do |format|
      format.html # new.html.erb
      format.json { render json: @page }
    end
  end

  def edit
    @page = Page.find(params[:id])
  end

  def create
    @page = Page.new(params[:page])

    respond_to do |format|
      if @page.save
        format.html { redirect_to @page, notice: 'Page was successfully created.' }
        format.json { render json: @page, status: :created, location: @page }
      else
        format.html { render action: "new" }
        format.json { render json: @page.errors, status: :unprocessable_entity }
      end
    end
  end

...snip...

end

型号:

class Page < ShopifyAPI::Page    #Note: ShopifyAPI::Page extends ActiveResource::Base
    schema do
        string :author
        string :body_html
        string :title
        string :metafield
        string :handle
    end
end

视图:(为简洁起见)

...
<%= form_for(@page) do |f| %>
    <% if @page.errors.any? %>
        <div id="error_explanation">
            <h2><%= pluralize(@page.errors.count, "error") %> prohibited this page from being saved:</h2>

            <ul>
            <% @page.errors.full_messages.each do |msg| %>
                <li><%= msg %></li>
            <% end %>
            </ul>
        </div>
    <% end %>
    <div class="field">
        <%= f.label :author %><br />
        <%= f.text_field :author %>
    </div>
...

【问题讨论】:

    标签: ruby-on-rails shopify activeresource


    【解决方案1】:

    【讨论】:

    • 喜欢attr_accessible :title, :author, :handle, :metafield?我之前尝试过这个并且得到了各种看似无关的错误 - undefined method each' 代表 nil:NilClass` 是一个,undefined method attr_accessible' 代表 Page:Class` 是另一个。我认为 attr_accessible 仅适用于 ActiveRecord(而不是 Resource)。不过,我是一个完全的 RoR 新手,所以......
    • 如果你需要批量赋值(即一次设置多个变量,比如提交表单的时候)你需要指定这些属性是批量赋值的,否则会说没有这个属性.如果您需要单独访问它们(即使用 getter 和 setter),请使用 attr_accessor。
    • 我想这正是这样做的,因为它实际上是一个 HTTP POST。如何将属性指定为“可批量分配”?
    • 我提到我曾尝试使用“attr_accessible”,这导致我的第一条评论出现错误。我正在使用 ActiveRESOURCE(不是 ActiveRECORD)
    猜你喜欢
    • 2023-03-18
    • 2014-10-21
    • 2014-10-21
    • 1970-01-01
    • 2023-01-17
    • 1970-01-01
    • 2011-12-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多