【问题标题】:Get any id to any user exists in the database获取数据库中存在的任何用户的任何 id
【发布时间】:2015-05-02 19:07:36
【问题描述】:

我是 Rails 新手,有一个任务要求我发送邀请,让任何用户成为我杂志的管理员,这是我的一段代码

def invite
    inviteUser = { 'user_id' => current_user.id, 'Magazine_id' => params[:id] }
    CollaborationInvitation.create(inviteUser)
    @magazine = Magazine.find(params[:id])
    redirect_to :back
    rescue ActionController::RedirectBackError
    redirect_to root_path
end

我需要将 current_user.id 替换为引用我数据库中存在的任何用户 ID 的内容,以向他发送与我一起成为管理员的邀请 我尝试添加 @User=Users.All 然后将其作为变量传递,但它得到了我一个错误我尝试了很多东西,但每次我得到一个错误除了添加current_user.id

ps:我正在使用设备进行身份验证

【问题讨论】:

  • 应该是@users = User.all,它将返回表中的所有用户,试试@user = User.last。或者您也可以遍历所有用户并向所有User.all.each do |user| ..do your logic here wth the user.. end发送邀请
  • @Sontya 我不需要发送给所有用户我只需要通过插入他的 id 发送给一个用户
  • 然后执行此操作,User.last.id 将给您数据库中的最后一个用户或User.first.id 将给您数据库中的第一个用户

标签: ruby-on-rails ruby ruby-on-rails-4 sqlite3-ruby


【解决方案1】:

你问了几件事,这有点让人困惑你想做什么。

这是获取模型中所有记录 ID 的方法。

Rails4: User.ids

Rails3: User.all.map(&:id)

或者(不确定#pluck 是否在 Rails 3 中)

User.pluck(:id) 

如果您想获得一个随机用户(您提到“任何用户”),您可以这样做。

User.find(User.pluck(:id).sample)

虽然我认为您真正想要做的是将用户的 id 或其他一些属性作为参数传递给操作并向该用户发送邀请。

大概您有"users#invite" 的帖子或获取路线(您在问题中写的操作)。您可以在此处添加命名参数,也可以传递 url 参数,或者如果您使用的是 post 路由,则可以将参数添加到 post body。

然后在您的控制器中,您可以执行以下操作(我将使用电子邮件作为属性):

def invite
  @user = User.find_by(email: params[:user_email])

  #Rails 3 like this
  # @user = User.find_by_email(params[:user_email])
   # now do stuff with user
end

【讨论】:

  • 我使用了 ID 为 18 的 User.find(User.pluck(:id).sample) ,它存在于数据库中,它没有引发任何错误,但它没有将其发送给用户ID 18
  • :id 是符号。如果你已经知道 id 你可以做 User.find(18)
  • 这里是 pluck apidock.com/rails/ActiveRecord/Calculations/pluck 的文档。基本上,它返回传递的属性值的数组。然后 Array#sample 在数组中选择一个随机项。所以基本上User.find(User.pluck(:id).sample) 意味着从所有用户 id 的列表中找到 user.id 等于随机 id 的第一个用户。
【解决方案2】:

User.all 将返回用户集合。所以, 查找用户对象以获取 id... 试试这个代码....

def invite
     inviteUser = { 'user_id' => User.find_by_email('user@example.com').id, 'Magazine_id' => params[:id] }
     CollaborationInvitation.create(inviteUser)
     @magazine = Magazine.find(params[:id])
     redirect_to :back
     rescue ActionController::RedirectBackError
     redirect_to root_path
 end

【讨论】:

  • 这会发送给单个用户 我列出了所有用户,因此我可以通过单击邀请链接将邀请发送给我需要的任何用户,但这总是发送给单个用户,我需要将其设为用户友好的` 邀请'.html_safe,控制器::杂志,操作::邀请,方法::put,u_id:u.id %> `
【解决方案3】:

你可以试试

User.last.id

User.find_by_email("xyz@test.com").id

User.where(email: "xyz@test.com").first.id

将 xyz@test.com 替换为所需的用户电子邮件地址。更多rails活动记录查询接口详情,请阅读rails guideshttp://guides.rubyonrails.org/active_record_querying.html

【讨论】:

    猜你喜欢
    • 2015-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-08
    • 1970-01-01
    • 1970-01-01
    • 2016-05-17
    • 2015-02-26
    相关资源
    最近更新 更多