2017-05-27 121 views
-1

我有一个名为“userinfo”的用户配置文件控制器,它是相应的视图。 userinfo索引是根路径。在主页(这是用户信息索引),我有一个链接,可以将您带到用户个人资料页面。它给我这个错误,当我在图像上单击视图页上:enter image description here 我的路线是:enter image description here 我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'。如果我这样做,网页甚至不加载,这让我这个错误:enter image description here

回答

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 %> 
+0

嗨,你有没有改变控制器中的任何东西?另外,我应该在控制器的“before_action”中添加':index'吗? – Dinukaperera

+0

@Dinukaperera你必须通过id而不是instace变量userinformation_user_id – puneet18

1

你的问题是你正在尝试执行基于不是ActiveRecord(数据库)属性的查询。

您的根源去UserinfosController哪些期望@userinformation_user_id,但我不能告诉你的代码,从哪里来。

+0

嘿,哥们,哪一部分你感到困惑?感谢您的帮助! – Dinukaperera

1

您需要定义为了你的路线,这将是期待一个特定的PARAM,也许用户id,然后你可以将您的视图中添加值,在link_to帮手:

你可以修改你的routes.rb期待的id为PARAM:

get '/user_infors/:id', to: 'userinfos#index', as: 'userinfo_path' 

然后在你的控制器,使用find在数据库中“发现”这样的ID的用户。如果你想使用where那么这会给你一个userinfosid作为参数传递的关系。 如果你想的话,那么使用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让所有的userinforsshow方法来获取特定的一个,就像你正在做的那样。

+0

非常感谢,你能帮我理解你的最后一行吗? “一种获得特定的展示方法”?我怎么做?另外,我是否必须在控制器的before_action中添加“:index”? – Dinukaperera

+0

而在路线中,为什么它是'/ user_infors /:id'?“user_infors”来自哪里? – Dinukaperera

+0

我的意思是,如果您想要查找某条记录并“显示”它,则只有一条记录,可以用show方法执行,另一方面,如果要显示可以使用的所有记录索引方法。 '/ user_infors'是你的索引路由,'/ user_infors /:id'就是获得一个特定的记录。 –

相关问题