首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >检查和更新当前用户对象

检查和更新当前用户对象
EN

Stack Overflow用户
提问于 2015-04-18 13:06:40
回答 3查看 64关注 0票数 0

我正在尝试更改当前用户的布尔值,并检查当前用户的布尔值是否为真。我有一个工作变量(user_id,它显示发布它的用户的id。此外,用户将只有一个二维码。

这将更新当前用户的布尔值:

代码语言:javascript
复制
 <%  @qr = Qr.index.update_attributes(clue1: true) %>

此检查用于检查当前用户的布尔值之一是否为真:

代码语言:javascript
复制
<% if @qr = Qr.index.clue1 == true %>
    Good job
  <% else %>
    You need to find the code!
<% end %>

这是我的qr控制器:

代码语言:javascript
复制
class QrController < ApplicationController

def index
    @user = User.find(params[:user_id])
    @qr = @user.Qr
  end

  def show
    respond_with(@qr)
  end

  def new
    @qrs = Qr.new
    respond_with(@qr)
  end

  def edit
  end

  def create
    @qr = Qr.new(qr_params)
    @qr = current_user.qr.build(params[:qr_params])
    @qr.created_by = current_user.id
    @qr.save
    redirect_to "/home/clues"
  end

  def update
    @qr.update(qr_params)
    respond_with(@qr)
  end

  def destroy
    @qr.destroy
    respond_with(@qr)
  end
end

用户和Qr模型

代码语言:javascript
复制
class Qr < ActiveRecord::Base
belongs_to :user
end

代码语言:javascript
复制
    class User < ActiveRecord::Base
  # Include default devise modules. Others available are:
  # :confirmable, :lockable, :timeoutable and :omniauthable
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable
     has_many :qrs
   end

TDLR:我不知道它是否是当前的用户模型。

EN

回答 3

Stack Overflow用户

发布于 2015-04-18 14:04:23

你需要定义

代码语言:javascript
复制
before_filter :set_user

private
def set_user
  @user = User.find(params[:user_id])
end

在你的QrController中

我希望它能起作用

票数 0
EN

Stack Overflow用户

发布于 2015-04-18 14:39:29

从您的代码中可以看出,用户只能访问自己的Qr。因此,您的路由将具有以下内容

代码语言:javascript
复制
resources :qrs

(请注意,控制器应始终使用复数才能使用自动路由)。

在这种情况下,您可以将当前用户的QR加载为

代码语言:javascript
复制
class QrsController < ApplicationController
  def index
    @qrs = current_user.qrs
    # do things
  end

  def show
    @qr = current_user.qrs.find(params[:id])
    # do things
  end
  # ...
end

==Addendum==

您在视图中编写的代码没有多大意义...

代码语言:javascript
复制
if @qr = Qr.index.clue1 == true

首先,不要将操作(index)用作助手函数或查询函数。

其次,index是QrController的实例方法(您可以说是@qrc = QrController.new; @qrc.index,但在任何情况下,控制器的方法都不是要由您调用的,它们对应于特定的路由/urls,并且将由它们自己调用),而不是Qr的类方法。

第三,这段代码没有做您期望的事情:

代码语言:javascript
复制
if @qr = Qr.index.clue1 == true

等同于

代码语言:javascript
复制
if @qr = (Qr.index.clue1 == true)

因此,如果方法Qr.index.clue1返回true,它将布尔值赋给变量@qr,否则将布尔值赋给@qr,否则为false

同样的道理也适用于

代码语言:javascript
复制
Qr.index.update_attributes(clue1: true)

一般来说,您混淆了控制器的操作和模型查找器。

票数 0
EN

Stack Overflow用户

发布于 2015-04-18 14:44:13

假设这些线索属于qr

代码语言:javascript
复制
def create
  @qr = current_user.qrs.new(qr_params)
  @qr.assign_attributes(
    clue1 = true,
    clue2 = false,
    ...
  )
  if @qr.save
    redirect_to "/home/clues"
  else
    # handle failed save
  end
end

如果它们属于用户,则替换为

代码语言:javascript
复制
@qr.user.assign_attributes

然后,您还需要保存用户

代码语言:javascript
复制
if @qr.save && @qr.user.save
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29713166

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档