【问题标题】:"NoMethodError" undefined method `name' for #<LogFileUpload:0x00007ff60df5d998>#<LogFileUpload:0x00007ff60df5d998> 的“NoMethodError”未定义方法“名称”
【发布时间】:2019-06-12 12:39:42
【问题描述】:

我在日志文件上传项目的 new.html.erb 上遇到错误。它说“NoMethodError”和“# 的未定义方法‘名称’”。

我真的不明白为什么,因为我已经在我的模型和控制器中定义了名称。

我的 new.html.erb

<div class="container">   
    <% if @log_file_upload.errors.present? %>    
       <div>   
          <ul>   
             <% @log_file_upload.errors.full_messages.each do |msg| %>   
                <li><%= msg %></li>   
             <% end %>
            </ul>   
       </div>   
    <% end %>   

    <div>   
       <%= form_for LogFileUpload.new, html: { multipart: true } do |f| %>   
          <%= f.label :name %>   
          <%= f.text_field :name %>   
          <br><br>   
          <%= f.label :attachment %>   
          <%= f.file_field :attachment %>   
          <br>   
          <%= f.submit "Save" %>   
       <% end %>   
    </div>   
</div>

我的 log_file_upload_controller.rb:

class LogFileUploadController < ApplicationController
  def index   
      @log_file_upload = LogFileUpload.all   
   end   

   def new   
      @log_file_upload = LogFileUpload.new   
   end   

   def create   
      @log_file_upload = LogFileUpload.new(log_file_upload_params)   

      if @log_file_upload.save   
         redirect_to log_file_upload_path, notice: "Successfully uploaded."   
      else   
         render "new"   
      end   

   end   

   def destroy   
      @log_file_upload = LogFileUpload.find(params[:id])   
      @log_file_upload.destroy   
      redirect_to log_file_upload_path, notice:  "Successfully deleted."   
   end   

   private   
      def log_file_upload_params   
      params.require(:log_file_upload).permit(:name, :attachment)   
   end   
end

我的路线.rb:

Rails.application.routes.draw do

  get 'log_file_upload/index'
  get 'log_file_upload/new'
  get 'log_file_upload/create'
  get 'log_file_upload/destroy'
get 'sessions/new'
get "log_out" => "sessions#destroy", :as => "log_out"
get "log_in" => "sessions#new", :as => "log_in"
get "sign_up" => "users#new", :as => "sign_up"
root :to => "log_file_upload#index"
resources :users
resources :sessions
resources :log_file_uploads, :path => 'log_file_uploads', only: [:index, :new, :create, :destroy]  

end

我的 log_file-upload.rb:

class LogFileUpload < ApplicationRecord
    mount_uploader :attachment, AttachmentUploader 
    validates :names, presence: true 

    belongs_to :user
end

我的用户.rb

class User < ActiveRecord::Base
  attr_accessor :password, :password_confirmation

  before_save :encrypt_password

  validates_presence_of :email
  validates_uniqueness_of :email
  validates_confirmation_of :password
  validates_presence_of :password, :on => :create

  has_many :log_file_uploads

  def self.authenticate(email, password)
    user = find_by_email(email)
    if user && user.password_hash == BCrypt::Engine.hash_secret(password, user.password_salt)
      user
    else
      nil
    end
  end

  def encrypt_password
    if password.present?
      self.password_salt = BCrypt::Engine.generate_salt
      self.password_hash = BCrypt::Engine.hash_secret(password, password_salt)
    end
  end
end

【问题讨论】:

  • 您能否向我们展示您的 db/schema.rb 以及 rails 控制台中“LogFileUpload.new”的输出?

标签: ruby-on-rails ruby file-upload


【解决方案1】:

您可以首先检查您的真实列名。我注意到您在控制器和视图中定义了“名称”,但在模型中定义了“名称”。

顺便说一句,当你在你的控制器中定义LogFileUpload.new时,你可以直接在你的视图中使用它,而不用两次调用新方法:

<div class="container">   
<% if @log_file_upload.errors.present? %>    
   <div>   
      <ul>   
         <% @log_file_upload.errors.full_messages.each do |msg| %>   
            <li><%= msg %></li>   
         <% end %>
        </ul>   
   </div>   
<% end %>   

<div>   
   <%= form_for @log_file_upload, html: { multipart: true } do |f| %>   
      <%= f.label :name %>   
      <%= f.text_field :name %>   
      <br><br>   
      <%= f.label :attachment %>   
      <%= f.file_field :attachment %>   
      <br>   
      <%= f.submit "Save" %>   
   <% end %>   
</div>   

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-09
    • 2011-07-11
    • 2013-04-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多