オブジェクトが存在しないため、カスタム メソッドwebshops#reset
が から実際に呼び出されることはありません。代わりに、、などのサブクラスがあります。webshops_controller
Webshop
PrestashopWebshop
MagentoWebshop
Myapp::Application.routes.draw do
...
resources :webshops
resources :magento_webshops
resources :prestashop_webshops
get "api/webshop/:id/reset" => "webshops#reset"
...
end
サブクラスコントローラーのメソッドは次のとおりです。
class MagentoWebshopsController < WebshopsController
def scoped_webshops
"magento_webshops"
end
end
サブクラスコントローラーからアクションをmagento_webshops_controller
呼び出すと、にアクセスできます。しかし、カスタム メソッドを呼び出すと、これらのサブ クラス メソッドにアクセスできません。index
scoped_webshops
reset
class WebshopsController < InheritedResources::Base
respond_to :html, :json
before_filter :authenticate_user!
def index
@webshops = current_user.send(scoped_webshops)
end
def reset
webshop = Webshop.find(params[:id])
@webshops = current_user.send(scoped_webshops)
respond_to do |format|
format.html {
...
}
format.js
end
end
end
では、どのように呼び出すのですかapi/webshop/:id/reset
(すべてのサブクラスは同じものを使用して ajax を介しwebshops.js.coffee
て呼び出します)。サブクラスからアクションを呼び出さずに直接作業することreset
が問題全体の原因だと思います。webshops_controller
ただし、最初の行 ( webshop = Webshop.find(params[:id])
) は、サブクラス オブジェクトを返すため、どのサブクラスを使用する必要があるかを何らかの方法で判断できるようにする必要があります...
アップデート:
サーバーの応答は次のとおりです。
Started GET "/api/webshop/522ede3983c336b7d600000f/reset?time_string=5&_=1378809004554" for 127.0.0.1 at 2013-09-10 12:30:14 +0200
Processing by WebshopsController#reset as JS
Parameters: {"time_string"=>"5", "_"=>"1378809004554", "id"=>"522ede3983c336b7d600000f"}
MOPED: 127.0.0.1:27017 QUERY database=feedbackzilla_development collection=webshops selector={"_id"=>"522ede3983c336b7d600000f"} flags=[:slave_ok] limit=0 skip=0 batch_size=nil fields=nil (0.4311ms)
MOPED: 127.0.0.1:27017 QUERY database=feedbackzilla_development collection=users selector={"$query"=>{"_id"=>"522887dc83c3368361000964"}, "$orderby"=>{:_id=>1}} flags=[:slave_ok] limit=-1 skip=0 batch_size=nil fields=nil (0.5710ms)
MOPED: 127.0.0.1:27017 QUERY database=feedbackzilla_development collection=webshops selector={"_id"=>"522ede3983c336b7d600000f"} flags=[:slave_ok] limit=0 skip=0 batch_size=nil fields=nil (0.4909ms)
MOPED: 127.0.0.1:27017 UPDATE database=feedbackzilla_development collection=webshops selector={"_id"=>"522ede3983c336b7d600000f"} update={"$set"=>{"rebuild_days"=>5, "updated_at"=>2013-09-10 10:30:14 UTC}} flags=[] (0.1259ms)
Completed 500 Internal Server Error in 86ms
NameError - undefined local variable or method `scoped_webshops' for #<WebshopsController:0x007fb710accc08>:
app/controllers/webshops_controller.rb:50:in `reset'