我是铁杆新手!
我想知道为什么在这种不同的情况下,一项工作,一项工作没有。
### in my controller ###
def watch_randurl
# @dat = Video.where(url_rand: params[:url_rand])
@dat = Video.find(1)
end
使用find(1)
,我拥有自己的数据库,在我看来这项工作!
### in my view ###
<%= @dat.url_rand %> <br>
但是where
我有一个
undefined method 'url_rand' for <Video::ActiveRecord_Relation:0x007fcbfeece1c8>
Ps:对不起我的英文:/ 当然,我需要在哪里工作。
解决方案:Video.where(url_rand: params[:url_rand]).first
谢谢!
答案 0 :(得分:1)
但是我有一个未定义的方法&#39; url_rand&#39;对于 视频:: ActiveRecord_Relation:0x007fcbfeece1c8
where
会返回ActiveRecord_Relation
,因此在这种情况下,您需要将@dat = Video.where(url_rand: params[:url_rand])
修改为@dat = Video.where(url_rand: params[:url_rand]).first
<强> 或 强>
您可以像下面一样迭代@dat
,而不会更改@dat
<% @dat.each do |dat| %>
<%= dat.url_rand %> <br>
<% end %>
答案 1 :(得分:0)
@dat = Video.find(1)
会返回单个Vedio对象,这就是您可以使用@dat.url_rand
的原因。
但是当您使用@dat = Video.where(url_rand: params[:url_rand])
之类的地方时,您将在@dat
中获得一系列对象。所以@dat将是一个对象数组。
在这种情况下,您必须遵循Pavan's建议并执行以下操作:
@dat.first.url_rand
或@dat[0].url_rand
答案 2 :(得分:0)
如果您正在寻找的是基于条件获取记录的方法,您可以使用 find_by 。
find_by(* args) source
查找符合指定条件的第一条记录。
在您的情况下,您可以使用:
@video = Video.find_by(url_rand: params[:url_rand])
@video将是第一个符合条件的视频。