仅从轨道模型访问一些数据

时间:2017-05-29 02:21:49

标签: ruby-on-rails ruby

我有一个userinfor模型,其名称为userinfo_id,user_id。我有一个user_id用户模型。我有一个带有video_id,name,userinfo_id和user_id的视频模型。因此,如果用户上传视频,并且他的user_id为5,userinfo_id为10,则视频模型信息将如下所示:Video_id:某个数字,名称:nameofvid,userinfo_id:10和user_id :5。现在解释了关系,我在索引页面上显示所有userinfo数据和视频。我的索引页面也有一个小搜索栏,所以我的控制器索引函数如下所示: 我的userinfos控制器索引功能:

def index
  @userinfors = Userinfo.where(["name LIKE ?","%#{params[:search]}%"])
  @myvideo = Video.where(:user_id => @userinfors.user_id)
end

当我运行它时,我收到以下错误: enter image description here 他们引用的第6行是" @myvideo = ...."索引函数中的行。

我的索引视图:

<%= form_tag userinfos_path, :method => 'get' do %>
    <%= text_field_tag :search, params[:search] %>
    <%= submit_tag "search" %>
<% end %>

<div>
    <% @myvideo.each do |myvideo| %>
        <div>  
            <%= video_tag myvideo.introvideo_url.to_s, :size => "240x160", :controls =>true %>
        </div>
        <div>
            <% @userinfors.each do |userinfor| %>
                <div>
                    <% if userinfor.user_id == myvideo.user_id %>
                        <p><span>Name: </span> <%= userinfor.name %> </p>
                        <p><span>College: </span> <%= userinfor.college %> </p>
                        <p><span>GPA: </span> <%= userinfor.gpa %> </p>
                        <p><span>Major: </span> <%= userinfor.major %> </p>
                        <%= link_to "profile", userinfo_path(myvideo.userinfo_id) %>
                    <% end %>
                </div>
        <% end %> 
        </div>
    <% end %> 
</div>

@userinfors获取记录名称与搜索栏中输入的名称相匹配的所有记录。这部分有效。因此,我们假设有100条记录。其中10个被命名为THOMAS。然后当THOMAS进入搜索栏时,@ userinfors将有10条记录,对吧?因为只有10个被命名为托马斯。这意味着这10个记录具有不同的个人user_id。那么我想要发生的是,程序将浏览100个视频记录,如果该视频记录中的user_id与10个@userinfors记录中的一个中的user_id匹配,则该视频将被添加到@myvideo变量中。所以最后,@ myvideo将有10条记录。 @userinfors中十条记录的user_id将等于@myvideo中十条记录的user_id。这就是我想要发生的事情。

用户模型:

class User < ActiveRecord::Base
  has_many :userinfos
  has_many :videos

  # Include default devise modules. Others available are:
  # :confirmable, :lockable, :timeoutable and :omniauthable
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable
end

Userinfo模型:

class Userinfo < ActiveRecord::Base
    belongs_to :user
    has_many :videos, through: :user

    def info_complete?
        name? && email? && college? && gpa? && major?
    end
end

视频模型:

class Video < ActiveRecord::Base
    belongs_to :user
    mount_uploader :introvideo, VideoUploader 
end

1 个答案:

答案 0 :(得分:1)

您正在访问ActiveRecordRelationship以获取user_id属性,为此,您需要访问该关系中的特定对象。

您正在使用where语句的结果ActiveRecordRelationship创建另一个传递该对象的查询。您应该迭代该关系中的每个元素,但不是要在控制器中执行的操作。

你可以在app/helpers/userinfos_helper.rb中创建一个帮助器,它接收user_id并返回所有user_id作为值的视频,可能:

# app/helpers/userinfos_helper.rb
def video_by_user_id(user_id)
  Video.where('user_id = ?', user_id)
end

然后在您看来,当您遍历user_id并将其传递给您的助手时,您可以获得@userinfors

# app/views/userinfos/index.html.erb
<% @userinfors.each do |user| %>
  <% video_by_user_id(user.user_id).each do |video| %>
    <%= video.path %>
  <% end %>
<% end %>