我正在尝试更改当前用户的布尔值,并检查当前用户的布尔值是否为真。我有一个工作变量(user_id,它显示发布它的用户的id。此外,用户将只有一个二维码。
这将更新当前用户的布尔值:
<% @qr = Qr.index.update_attributes(clue1: true) %>此检查用于检查当前用户的布尔值之一是否为真:
<% if @qr = Qr.index.clue1 == true %>
Good job
<% else %>
You need to find the code!
<% end %>这是我的qr控制器:
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模型
class Qr < ActiveRecord::Base
belongs_to :user
end和
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
endTDLR:我不知道它是否是当前的用户模型。
发布于 2015-04-18 14:04:23
你需要定义
before_filter :set_user
private
def set_user
@user = User.find(params[:user_id])
end在你的QrController中
我希望它能起作用
发布于 2015-04-18 14:39:29
从您的代码中可以看出,用户只能访问自己的Qr。因此,您的路由将具有以下内容
resources :qrs(请注意,控制器应始终使用复数才能使用自动路由)。
在这种情况下,您可以将当前用户的QR加载为
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==
您在视图中编写的代码没有多大意义...
if @qr = Qr.index.clue1 == true首先,不要将操作(index)用作助手函数或查询函数。
其次,index是QrController的实例方法(您可以说是@qrc = QrController.new; @qrc.index,但在任何情况下,控制器的方法都不是要由您调用的,它们对应于特定的路由/urls,并且将由它们自己调用),而不是Qr的类方法。
第三,这段代码没有做您期望的事情:
if @qr = Qr.index.clue1 == true等同于
if @qr = (Qr.index.clue1 == true)因此,如果方法Qr.index.clue1返回true,它将布尔值赋给变量@qr,否则将布尔值赋给@qr,否则为false。
同样的道理也适用于
Qr.index.update_attributes(clue1: true)一般来说,您混淆了控制器的操作和模型查找器。
发布于 2015-04-18 14:44:13
假设这些线索属于qr
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如果它们属于用户,则替换为
@qr.user.assign_attributes然后,您还需要保存用户
if @qr.save && @qr.user.savehttps://stackoverflow.com/questions/29713166
复制相似问题