我有一个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
当我运行它时,我收到以下错误: 他们引用的第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
答案 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 %>