gpt4 book ai didi

ruby-on-rails - 未定义的局部变量或方法 `user' rails Controller 问题

转载 作者:数据小太阳 更新时间:2023-10-29 08:38:00 26 4
gpt4 key购买 nike

初学者...我正在尝试显示图像,但收到“未定义的局部变量或方法‘用户’”错误消息。我想我知道发生了什么 - 没有方法,但我似乎无法让它与我尝试过的方法一起正常工作。我有一个“项目”模型和 Controller ……以及一个“版本”模型和 Controller 。 (很确定这只是一个 Controller 问题,所以我已经发布了这些文件……如果我需要发布其他文件,请告诉我)。我相信发生的事情是当用户创建新版本时未设置 user_id(至少当我为某个版本 ID 运行“version.user_id”时,它返回 nil)。我该怎么办...

1) 当登录用户创建版本时,确保在数据库中设置了 user_id?2) 确保版本索引中有一个方法,以便我可以显示该 user_id 的个人资料图片以创建版本??

在此先感谢您的帮助...

错误:

NameError in Versions#index
Showing /Users/user/Documents/clones/collab/app/views/versions/_version.html.erb where line #3 raised:

undefined local variable or method `user' for #<#<Class:0x00000101b39f28>:0x0000010828c1d0>

版本控制者:

class VersionsController < ApplicationController
before_action :find_project

def new
@version = Version.new
end

def show
@project = Project.find(params[:project_id])
@version = Version.find(params[:id])
end

def index
# @user = User.where(:id => @version.user_id) first figure out how to set user_id on new versions (its nil now)
@versions = Version.paginate(page: params[:page])
end

def create
@project = Project.find(params[:project_id])
@version = @project.verions.build(version_params)
if @version.save
flash[:success] = "You've successfully added a version of this project"
redirect_to project_path(@project)
else
render 'new'
end
end

def edit

end

def update

end

def destroy

end

private

def find_project
@project = Project.find(params[:project_id])
end

def version_params
params.require(:version).permit(:title, :project_id, :user_id)
end
end

版本新 View :

<% provide(:title, 'New Version') %>

<div class="row-fluid">
<div class="col-md-5 no-pad">
<h1>Add a new version to this project</h1>
<%= bootstrap_form_for @version, :url => project_versions_path do |f| %>

<%= render 'shared/error_messages', object: f.object %>

<%= f.text_field :title %>

<div class="well">
<h4>Drag and Drop your file here:</h4>
<%= image_tag("wavicon-large-grey.png", alt: "add file") %>
</div>

<%= f.button "Create Now! ", class: "btn btn-lg btn-primary" %>
<% end %>
</div>

</div>

版本索引 View :

<% provide(:title, @versions ) %>

<div class="row-fluid">
<section class="no-pad col-md-9">

<%= render :partial => '/projects/project_header' %>

<h4>Version History</h4>

<%= will_paginate %>

<ul class="versions">
<% @project.versions.first(5).each do |version| %>

<%= render version %>

<% end %>
</ul>

<!-- CAN REFACTOR TO BELOW FOR CLEANER CODE
<ul class="versions">
<%= render @versions %>
</ul>
-->

<%= will_paginate %>

</section>
</div>

_VERSION.HTML.ERB PARTIAL(链接到上面的索引文件)

<li>
<%= link_to project_version_path(@project, version) do %>
<h6><%= image_tag user.image_url(:collaborator_thumb).to_s, :class => "profile-pic-thumb" %><%= version.title %>...</h6>
<span class="timestamp pull-right">
Created <%= time_ago_in_words(version.created_at) %> ago
<span class="glyphicon glyphicon-time"></span>
</span>

<% end %>
</li>

VERSION.RB 模型(不确定是否需要):

class Version < ActiveRecord::Base
belongs_to :project
belongs_to :user
validates :title, presence: true, length: { maximum: 140 }

default_scope -> { order('created_at DESC') }
end

最佳答案

解决以下错误

undefined local variable or method 'user' for #<#<Class:0x00000101b39f28>:0x0000010828c1d0>

在你的_version.html.erb部分,

替换

<h6><%= image_tag user.image_url(:collaborator_thumb).to_s, :class => "profile-pic-thumb" %><%= version.title %>...</h6>

<h6><%= image_tag version.user.image_url(:collaborator_thumb).to_s, :class => "profile-pic-thumb" %><%= version.title %>...</h6>

备注version.user.image_url而不是 user.image_url .你收到错误是因为 user undefined variable 。但是version被定义为访问关联的 user记录你可以简单地使用 version.user .

更新

User 的关联Version 中缺少模型模型。设置如下:

class Version < ActiveRecord::Base
belongs_to :user
## ...
end

class User < ActiveRecord::Base
has_many :versions
## ...
end

更新 2

存储user_id对于 Version实例。更新 new Controller 中的操作如下:

def new 
@version = @project.versions.build(user_id: @project.user_id)
end

在版本new查看,为user_id添加一个隐藏字段:

<%= f.hidden_field :user_id %>

更新版本 index如下图:

   <ul class="versions">
<% @project.versions.first(5).each do |version| %>
<%= render partial: "version", object: version %>
<% end %>
</ul>

关于ruby-on-rails - 未定义的局部变量或方法 `user' rails Controller 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23374476/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com