【问题标题】:Restricting access by User in a related model's controller在相关模型的控制器中限制用户访问
【发布时间】:2011-09-07 15:48:44
【问题描述】:

我有一个控制器,我在其中做一些时髦的选择。我有一个属于一个用户的邀请表,并且有一个用户。

销毁邀请时,我希望“has_one 用户”进行销毁,在我的控制器中,我首先收到一组邀请用户的邀请:

def destroy
    @invitations = Invitation.find_by_recipient_email(current_user.email)

从这个@invitations 数组中,我想使用 :id 参数进行查找。有没有办法做这样的事情:

@invitations = Invitation.find_by_recipient_email(current_user.email)
    @invitation = @invitations.find(params[:id])

这样我可以将用户可以访问的邀请限制为他们被邀请的邀请(使用 current_user 方法),然后选择特定的邀请。我目前不能这样做,因为 .find 不适用于数组。

感谢您的帮助/指点。

编辑:对不起,我让帖子有点混乱,这里有更多信息:

这是我现在的整个销毁方法,我只想删除一条记录:

def destroy
    @invitations = Invitation.find_by_recipient_email(current_user.email)
    @invitation = @invitations.find(params[:id])  

    if @invitation.destroy
      redirect_to invitations_path, :notice => "Declined invitation"
    else
      redirect_to :back
    end
  end

我的邀请对象如下所示:

Invitation(id: integer, list_id: integer, sender_id: integer, recipient_email: string, created_at: datetime, updated_at: datetime) 

其中 send_id 和 recipient_email 是两个不同的用户。

我的邀请.rb:

belongs_to :sender, :class_name => 'User'
  has_one :recipient, :class_name => 'User'

也许问题是我会调用类似 current_users.invitations.find(params[:id]) 并重做我的邀请模型?

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-3


    【解决方案1】:

    你可以这样做:

    invitatation_scope = Invitation.where(["recipient_email = ?",current_user.email])
    @invitation =  invitation_scope.find(params[:id])

    但你应该使用 before_filter:

    before_filter :load_user_invitation, :only=>[:edit,:update,:destroy]
    
    def load_user_invitation
      @invitation = Invitation.where(["recipient_email = ?",current_user.email]).find(params[:id])
    end
    

    【讨论】:

      【解决方案2】:

      find 是一个 ActiveRecord 方法。您可以使用 Ruby 可枚举方法 select 返回匹配元素的数组,然后从数组中取出您的邀请。

      inv = @invitations.select { |i| i.id == params[:id] }
      @inviation = inv.empty? ? nil : inv[0]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-05-28
        • 2019-07-11
        • 2019-11-05
        • 2015-10-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多