我有一个“userinfos_controller”,用户可以在其中存储他们的信息。他们还可以将视频上传到他们的个人资料。我在 userinfos_controller 的 show 方法下展示这个视频,如下所示。我希望“@myvideo”获取与用户关联的视频。当用户删除他们的视频并重新上传时,video_id 会发生变化。所以我无法使用 video_id 调用该视频。有没有办法调用视频.userinfo.last?我不想调用 Video.last,因为它会给我所有用户上传的最后一个视频,而不仅仅是该特定用户上传的最后一个视频。您还可以在我的 Rails 控制台中看到,该视频有一个 user_id、userinfo_id 和一个 video_id。所以现在,在我的 show 方法下,当我这样做时:
def show
@myvideo = Video.find(params[:userinfo_id])
end
它查找等于 userinfo_id 的 Video_id,而我希望它查找该特定用户/userinfo 上传的最后一个视频。
我的用户信息 Controller :
class UserinfosController < ApplicationController
before_action :find_userinfo, only: [:show, :edit, :update, :destroy]
before_action :authenticate_user!
def index
@userinfors = Userinfo.all
@myvideo = Video.all
end
def show
@myvideo = Video.find(params[:userinfo_id])
end
def new
@userinformation = current_user.userinfos.build
end
def create
@userinformation = current_user.userinfos.build(userinfo_params)
if @userinformation.save
redirect_to root_path
else
render 'new'
end
end
def edit
end
def update
end
def destroy
@userinformation.destroy
redirect_to userinfo_path
end
private
def userinfo_params
params.require(:userinfo).permit(:name, :email, :college, :gpa, :major)
end
def find_userinfo
@userinformation = Userinfo.find(params[:id])
end
end
显示视频 View :
<div>
<%= video_tag @myvideo.introvideo_url.to_s, :size => "480x320", :controls =>true %>
</div>
视频模型:
class Video < ActiveRecord::Base
belongs_to :userinfo
belongs_to :user
mount_uploader :introvideo, VideoUploader
end
用户信息模型:
class Userinfo < ActiveRecord::Base
belongs_to :user
has_many :videos
end
用户模型:
class User < ActiveRecord::Base
has_many :vidoes
has_many :userinfos
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
end
最佳答案
要么在用户和视频之间创建直接关联,要么通过连接模型使其间接关联。不要两者都做。
直接 1-n:
class User < ApplicationRecord
has_many :videos
has_many :user_infos
# ...
end
class Video < ApplicationRecord
belongs_to :user
# ...
end
class UserInfo < ApplicationRecord
belongs_to :user
has_many :videos, through: :user
end
间接 1-n:
class User < ApplicationRecord
has_many :user_infos
has_many :videos, through: :user_infos
# ...
end
class UserInfo < ApplicationRecord
belongs_to :user
has_many :videos
end
class Video < ApplicationRecord
belongs_to :user_info
has_one :user, through: :user_info
# ...
end
两者都会让你做:
@user.videos.last
@user_info.videos.last
def show
@my_video = @user_info.videos.order(created_at: :desc).last
end
关于ruby-on-rails - 如何让实例变量访问 rails 中的 'id'?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44218743/