【问题标题】:Merit rails 4 not working for update actionMerit rails 4 不适用于更新操作
【发布时间】:2015-07-09 02:34:27
【问题描述】:

刚刚使用我的 rails 4 应用启动并运行 Merit gem。

到目前为止,用户在创建子文章时会收到第一个徽章。

我要授予的第二个徽章是当该子文章实际获得批准时,这只能由管理员完成。我尝试使用subarticle#update 作为操作,但它没有授予用户徽章。也许它与管理员从管理面板(rails admin gem)更新子文章有关?

这是我在初始化程序中的徽章:

Merit::Badge.create!(
  id: 2,
  name: "Serious Writer",
  description: "Things are gettin' serious! You have successfully written an approved article."
  )

以下是规则:

grant_on ['subarticles#update','subarticles#destroy'], badge_id: 2, badge:'serious writer', to: :user, temporary: true do |subarticle|
  subarticle.user.subarticles.approved.count >= 1
end

有什么建议吗?这颗宝石还是新手,所以可能是一个简单的错误。

【问题讨论】:

  • 您可能需要覆盖 Rails 管理控制器,就像我们对 Devise github.com/merit-gem/merit/wiki/… 所做的那样。此外,grant_on 可能应该被称为 'admin/subarticles#update'
  • 你知道我会给控制器分配什么类吗?设计它的Users::RegistrationsController < Devise::RegistrationsController,但不确定它如何与 rails_admin 一起使用。谢谢您的帮助! @TuteC
  • 它似乎不起作用。从正常形式(edit.html.erb)更新子文章时,徽章被授予非常好,但是从管理面板@TuteC 执行时出现问题
  • 不知道如何与 rails admin 集成。需要检查 Rails 管理员的内部结构。

标签: ruby-on-rails ruby-on-rails-4 controller badge merit-gem


【解决方案1】:

您批准文章的设置是什么样的?你可以在你的控制器中做到这一点,但我更愿意让它们保持苗条,并在你的胖模型中完成逻辑。

请注意,还有其他方法可以做到这一点,但这是我过去所做的。

class Subarticles < ActiveRecord::Base
  ...
  after_update :provide_badge_when_approved

  private

  def provide_badge_when_approved
    self.user.add_badge(2) if (self.approved_changed? && self.approved == true)
  end
  ...
end

【讨论】:

  • 这是我用来批准子文章的:scope :approved, -&gt; {where(:approved =&gt; true)},它在我的子文章模型中。然后,仅当管理员在管理面板(rails admin gem)内检查批准的框时才会显示。此外,子文章嵌套在文章中。让我玩弄你给我的东西。我认为它可能会奏效。谢谢! @Andrewcpkelley
  • @Kathan 让我知道它是否有效。我添加了一个检查来查看已批准的属性是否已从 false 更改为 true。
猜你喜欢
  • 1970-01-01
  • 2017-02-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-05
相关资源
最近更新 更多