0

我正在使用设计。在部分视图中,我有:

<%= simple_form_for resource, :as => :user, ...

在我的应用程序助手中:

  # @see http://stackoverflow.com/questions/4541075/what-is-the-devise-mapping-variable-and-how-can-i-include-it
  def resource_class
    devise_mapping.to
  end

  # @see http://stackoverflow.com/questions/4081744/devise-form-within-a-different-controller
  def resource_name
    :user
  end

  def resource
    # with some controllers (homepage, static, this method is called)
    # with other controllers (Item, it's not called: I don't see the abort call)
    abort('should stop here')
    @resource ||= User.new
  end

  def devise_mapping
    @devise_mapping ||= Devise.mappings[:user]
  end

在某些控制器上,我的表单工作正常。在其他人身上,我收到此错误:

找不到没有 ID 的项目

问题是我定义的方法没有被调用。对于某些控制器,ApplicationHelper.resrouce调用它,在其他控制器上,它是另一个方法资源(Item.resource ?),我不知道它在哪里定义。

如何在其他地方定义方法资源?为什么我的应用程序助手的方法资源没有在某些页面上调用?

注意:我正在使用定义方法资源的 gem 继承资源。也许这会造成冲突。但是不知道方法是怎么继承的

4

1 回答 1

0

在看到http://railscasts.com/episodes/230-inherited-resources之后,一切都变得清晰起来。

我在 ItemsController 中定义了资源:

 class ItemsController < InheritedResources::Base

  # @see http://stackoverflow.com/questions/16831095/devise-the-method-resource-is-not-called-properly
  def resource

    # this solves my problem. It looks super wrong tough
    @resource ||= User.new

    #view_context.resource # tried that, but doesn't work
  end

  # ...

现在它可以工作了。该方法resource正在由该控制器的 gem 重新定义...

于 2013-05-30T08:46:11.337 回答