我正在尝试更改当前用户的布尔值,并检查当前用户的布尔值是否为真。我有一个工作变量(user_id,显示发布它的用户的ID。此外,用户只有一个qr。
这应该更新当前用户boolean:
<% @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
end
TDLR:我不知道它是否是当前的用户模型。
答案 0 :(得分:0)
你需要定义
before_filter :set_user
private
def set_user
@user = User.find(params[:user_id])
end
你的QrController中的
我希望它有效
答案 1 :(得分:0)
从您的代码中可以看出,用户只能访问自己的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
==补遗==
您在视图中编写的代码并没有多大意义......
if @qr = Qr.index.clue1 == true
首先,您不要使用操作(index
)作为帮助函数或查询函数。
其次,index
是QrController的一个实例方法(你可以说是@qrc = QrController.new; @qrc.index
,但无论如何,控制器的方法并不意味着你被调用,它们相应于特定路线/网址将由他们自己调用),而不是Qr
的类方法。
第三,这段代码没有达到你的期望:
if @qr = Qr.index.clue1 == true
与
相同if @qr = (Qr.index.clue1 == true)
因此,如果方法true
返回true,则最终为变量@qr分配布尔值Qr.index.clue1
,否则为false
。
同样适用于
Qr.index.update_attributes(clue1: true)
你正在混淆控制器的动作和模型发现者。
答案 2 :(得分:0)
假设这些线索属于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.save