quanzhanying / fullstack-course

20 stars 7 forks source link

@group.user 需要赋值吗? #48

Closed DJ-MinorG closed 8 years ago

DJ-MinorG commented 8 years ago

如下判断语句前并没有给@group.user赋值,会默认什么值吗? def edit @group = Group.find(params[:id])

if current_user != @group.user
  redirect_to root_path, alert: "You have no permission."
end

end

gbt1988 commented 8 years ago

@group = Group.find(params[:id])这个等式,其实就是在赋值。首先,浏览器发送请求到服务器,服务器会根据url识别params[:id]并传给controller,而后Group.find(params[:id]),会根据params[:id],通过Group model找到数据库中对应的值,并赋值给@group。Group.find这里的Group是model中定义的:class Group < ApplicationRecord。对应的数据库中的名字是Groups。

chpwang commented 8 years ago

楼上(也就是 @no4long )其实没有理解 @cuckoo8695 的意思。我来回答吧: edit 这个 action 或者 method 是不给 @group.user 赋值的,给 @group.user 赋值的操作在 create 这个 action 里完成(也就是在创建时完成 .user 这个属性的赋值)。然后 .user 就一直是创建时候的那个值了。也就是杜鹃姐你说的默认值。

gbt1988 commented 8 years ago

sorry 我没看到后面的.user。这个问题我也不大了解......

DJ-MinorG commented 8 years ago

@chpwang 谢谢你的回复,不过我有点怀疑这个答案,一个变量赋值后可以用于多个action吗?我觉得变量只能停留在自己的action哦,否则method update 就没有必要再写@group = Group.find(params[:id])

另外,请不要叫我杜娟姐~~~~感觉自己很老 lol

shaojunda commented 8 years ago

@group.user 在用户创建 讨论版的时候我们手动给赋值了。可以看一下 groups_controller.rb 的 create 方法。

DJ-MinorG commented 8 years ago

在create中赋值 @group.user=current_user