将实例变量从控制器传递到rails中的视图

时间:2017-05-27 02:21:36

标签: ruby-on-rails ruby

我有一个名为“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

3 个答案:

答案 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 %> 以获取所有indexuserinfors方法来获取特定的方法,正如您尝试的那样。