我有一个名为“userinfo”的用户配置文件控制器,它是相应的视图。 userinfo索引是根路径。在主页(用户信息索引)中,我有一个链接,可以将您带到用户个人资料页面。当我点击视图页面上的图片时,它会给我这个错误: 我的路线是: 我的userinfos_controller:
class UserinfosController < ApplicationController
before_action :find_userinfo, only: [:show, :edit, :update, :destroy]
before_action :authenticate_user!
def index
@userinfors = Userinfo.where(:userinfo_id => @userinformation_user_id)
end
def show
@myvideo = Video.last
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
我的观点是:
<%= link_to image_tag("student.png", class: 'right'), userinfo_path(@userinfors) %>
我想也许我必须在控制器顶部的'before_action:find_userinfo'中包含':index'。如果我这样做,主页甚至不会加载,它会给我这个错误:
答案 0 :(得分:1)
尝试以下代码:
def index
@userinfors = Userinfo.where(:userinfo_id => @userinformation_user_id) #pass id instead of object @userinformation_user_id
end
<% @userinfors.each do |u| %>
<%= link_to image_tag("student.png", class: 'right'), userinfo_path(u) %>
<% end %>
答案 1 :(得分:1)
您的问题是您尝试根据不属于ActiveRecord(数据库)属性的内容执行查找。
您的root转到UserinfosController
,期望@userinformation_user_id
,但我无法从您的代码中看出来自哪里。
答案 2 :(得分:1)
您需要定义自己的路线,以便为特定的参数(可能是用户id
)预期,然后您就可以在{{1}中添加视图中的值} helper:
您可以修改link_to
以期望routes.rb
作为参数:
id
然后在您的控制器中,使用get '/user_infors/:id', to: 'userinfos#index', as: 'userinfo_path'
在数据库中“查找”具有此ID的用户。如果您想使用find
那么这会让您与所有where
建立关系,userinfos
作为参数传递。
如果您愿意,请使用id
:
Userinfo.where('userinfo_id = ?', params[:id])
然后在您看来,您可以访问def index
@userinfors = Userinfo.find(params[:id])
end
:
@userinfors
我认为您可以定义<% @userinfors.each do |user| %>
<%= link_to image_tag 'student.png', class: 'right', userinfo_path(user) %>
<% end %>
以获取所有index
和userinfors
方法来获取特定的方法,正如您尝试的那样。