我有一个应用程序,用户可以在其中定义自己的“状态”。然后我创建一个动态范围来处理这个问题。这在当地工作非常好,但是当我推到Heroku时,它不是因为某种原因。Rails 4 - 动态范围
型号:Task.rb:
Status.all.each do |status|
scope "#{status.name}".downcase.delete(' '), -> { where('status_id = ?', status.id).order('created_at DESC') }
end
路线:routes.rb中:
get 'tasks/filters/status/:scope' => "tasks#index"
控制器:tasks_controller.rb:
在这种情况下,关于状态的用户点击从视图上看,它落入else
区块并运行if params[:scope]
部分并执行@tasks = Task.send(params[:scope])
:
def index
@statuses = Status.all.order('name')
if params[:tag]
@tasks = Task.tagged_with(params[:tag])
else
if params[:scope]
@tasks = Task.send(params[:scope])
elsif params[:showall]
@tasks = Task.all.order('created_at DESC')
else
@tasks = Task.all.where('assigned_to = ?', current_user).order('created_at DESC').
reject { |t| t.status.default_view != true }
end
end
end
正如我所说的,当我使用rails s
在本地运行时,此功能完美,但当我推到Heroku时,出现错误。运行heroku logs
揭示了这一点:
2015-06-17T15:06:07.769748+00:00 app[web.1]: Parameters: {"scope"=>"open"}
2015-06-17T15:06:07.895996+00:00 app[web.1]: Role Load (1.4ms) SELECT "public"."roles".* FROM "public"."roles" WHERE "public"."roles"."id" = $1 LIMIT 1 [["id", 1]]
2015-06-17T15:06:07.907046+00:00 app[web.1]: ArgumentError (wrong number of arguments (0 for 1+)):
2015-06-17T15:06:07.907043+00:00 app[web.1]:
2015-06-17T15:06:07.907050+00:00 app[web.1]:
2015-06-17T15:06:07.907048+00:00 app[web.1]: app/controllers/tasks_controller.rb:12:in `index'
2015-06-17T15:06:07.907049+00:00 app[web.1]:
2015-06-17T15:06:07.972702+00:00 app[web.1]: Started GET "/tasks/filters/status/open" for 173.27.229.45 at 2015-06-17 15:06:07 +0000
2015-06-17T15:06:07.998359+00:00 app[web.1]: Completed 500 Internal Server Error in 23ms
凡tasks_controller.rb线12:
@tasks = Task.send(params[:scope])
是怎么回事?它说ArgumentError (wrong number of arguments (0 for 1+))
,但第一个条目清楚地表明参数“范围”正在设置正确(在这种情况下“打开”)。
我不认为通过'PARAMS [:范围]''来是Task.send'这样一个伟大的想法。如果有人将'scope'设置为'destroy_all'或其他破坏性会发生什么? – PerfectlyNormal
@PerfectlyNormal - 赶上!我没有考虑到这一点。看起来我不得不想另一种方式来支持这个功能。 – Trinculo
@PerfectlyNormal - 或者可能只是限制用户创建任何是任务的方法或instance_method的东西?这还不好吗? – Trinculo