小编Fil*_*aat的帖子

如何测试componentDidUpdate()?

这是一个示例实现:

export class Person extends Component {
  componentDidMount() {
    const { onLoadProfile, onLoadPolicy, person } = this.props
    onLoadProfile(person.profile.uri)
    onLoadPolicy(person.policy.uri)
  }

  componentDidUpdate(prevProps) {
    const { onLoadProfile, onLoadPolicy, person } = this.props
    const prevPerson = prevProps.person.uri
    const curPerson = person.uri

    // If person has changed, update Person component
    if (prevPerson !== curPerson) {
      onLoadProfile(person.profile.uri)
      onLoadPolicy(person.policy.uri)
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

componentDidMount(),我设法测试它像这样:

describe('<Person />', () => {
  let props
  let mountedPerson
  const mockLoadProfile = jest.fn()
  const mockLoadPolicy = jest.fn()

  const person = () …
Run Code Online (Sandbox Code Playgroud)

reactjs jestjs enzyme react-redux

16
推荐指数
1
解决办法
1万
查看次数

Rails 4:如何通过AJAX更新基于另一个collection_select的collection_select?

问题: 我需要根据组织集合的选择过滤单位集合.

选择组织后,单位下拉菜单应刷新以仅显示属于知情组织单位.

我检查过这些问题:

这些文件:

到目前为止这是我的代码:

楷模

class Organization < ActiveRecord::Base
  has_many :units
  has_many :projects, through: :units
end
class Unit < ActiveRecord::Base
  belongs_to :organization
  has_many :projects
end
class Project < ActiveRecord::Base
  belongs_to :organizaton
  has_one :organization, through: :unit
end
Run Code Online (Sandbox Code Playgroud)

查看 app/views/projects/_form.html.erb

<%= form_for(@project) do |f| %>

  <div class="field">
    <%= f.label :name %><br>
    <%= f.text_field …
Run Code Online (Sandbox Code Playgroud)

ajax ruby-on-rails ruby-on-rails-4

4
推荐指数
1
解决办法
3104
查看次数

CanCanCan:授权/取消授权特定的模型属性

我一直在摆弄CanCanCan gem以限制常规用户的操作,但到目前为止我只设法将授权限制为整个模型,而我真正需要的是限制对其某些属性的访问.

例如,在我的用户模型上,除了用户/密码/电子邮件之外,我有一个用于管理员的布尔值,我用它来验证登录用户的状态,在这种情况下,如果是user.admin ?,它可以访问/管理一切,否则,它应该能够读取所有内容,并且只有在user.id匹配时才能更新自己的记录.

我已经多次阅读文档,最接近的是将其添加到app/models/ability.rb中

can :update, :users, [:name, :password, :email]
Run Code Online (Sandbox Code Playgroud)

什么也没做.

所以,

问题:用户可以:更新整个模型,或者只是:读取它,我无法将其设置为:update或:读取特定属性.

我需要的是:用户能够:仅编辑特定属性.

问题:限制属性的正确语法是什么?我必须在其他一些文件上设置其他任何配置吗?

我的Ability.rb文件:

class Ability
  include CanCan::Ability

  def initialize(user)
    user ||= User.new
    if user.admin?
      can :manage, :all
      can :import, [User, Enclosure, Blade, Component]
    else
      can :access, :rails_admin
      can :dashboard
      can :read, :all
      can :history, :all
      # Allows user to only edit an enclosure, if it's allocated to itself, or not allocated at all
      can :update, Enclosure do |enclosure|
        can :update, Enclosure if (enclosure.allocated_to …
Run Code Online (Sandbox Code Playgroud)

authentication ruby-on-rails devise rails-admin cancancan

2
推荐指数
1
解决办法
1177
查看次数

Rails 5 Paranoia - 如何“显示”已删除的记录?

软删除记录后,我无法在show控制器上的操作上调用它,因为它会查找与记录匹配的记录ID WHERE deleted_at IS NULLL,考虑到宝石的用途,这是正确的,但我仍然希望能够在应用程序内以某种“只读”状态访问它,以便允许用户查看存档并可能恢复它。

如何解决删除范围以便我可以再次访问该对象?

更新1

根据@slowjack2k的建议,我可以使用以下查询访问软删除的记录:

 @area = Area.only_deleted.find(params[:id])
Run Code Online (Sandbox Code Playgroud)

后来由于CanCanCan 的原因 load_and_authorize_resource出现了一个新问题:它尝试调用

 @area = Area.find(params[:id])
Run Code Online (Sandbox Code Playgroud)

忽略only_deleted过滤器,导致错误,因为仅在deleted_at不为空(未删除)的情况下找到选定的id,并禁用授权“修复”它,所以它一定是CanCanCanParanoia之间的问题。

这是一个具有完全相同问题的线程:https ://github.com/rubysherpas/paranoia/issues/356

这是 StackOverflow 上的新问题线程:Paranoia 和 CanCanCan 之间的 Rails 5 兼容性受到损害?

如果找到解决方案,我会再次更新,谢谢。

更新2

问题已解决,解决方案可以在我上面提到的新问题线程中找到。

ruby-on-rails ruby-paranoia

1
推荐指数
1
解决办法
1万
查看次数