无法访问数据库中的值

时间:2015-09-30 10:18:18

标签: ruby-on-rails ruby-on-rails-4

我是铁杆新手!

我想知道为什么在这种不同的情况下,一项工作,一项工作没有。

### 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 谢谢!

3 个答案:

答案 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将是第一个符合条件的视频。