Rails carrierwave:未定义方法`image_url'用于#<shorttermcourse:0x007f9de0204ad8> </shorttermcourse:0x007f9de0204ad8>

时间:2015-02-10 12:30:27

标签: ruby-on-rails ruby-on-rails-3 carrierwave

我是铁杆新手。我使用rails 3.2.20和carrierwave gem以两种形式上传图像,即ShorttermCourse和OrientationCourse。这样可以正常工作。每当我尝试使用以下方法在ShorttermCourse中显示上传的图像时

<%= image_tag(@shortterm_course.image_url(:thumb).to_s, :class => @shortterm_course.image? ? "img-responsive img-thumbnail" : nil) %>

它出现以下错误:

未定义的方法`image_url&#39;对于#ShorttermCourse:0x007f9de0204ad8

但类似的代码显示了OrientationCourse的图像。

当我重新启动rails服务器时,它会显示ShorttermCourse的图像,但它会停止为OrientationCourse工作,给出未定义的方法&#39; image_url&#39;错误。以下是ShorttermCourse的文件:

show.html.erb:

<!-- row -->            
<div class="row">
    <div class="col-lg-12">
        <h1 class="page-header">Individual Record</h1>
    </div>
    <!-- /.col-lg-12 -->
    <p id="notice"><%= notice %></p>
</div>
<!-- /.row -->
<!-- row -->
<div class="row">
    <div class="col-lg-12">
        <%= image_tag(@shortterm_course.image_url(:thumb).to_s, :class => @shortterm_course.image? ? "img-responsive img-thumbnail" : nil) %>  
          <div class="table-responsive">
                      <table class="table table-striped table-hover">        
                            <tr>
                                <th>ID</th>
                                <th>Name</th>
                                <th>Gender</th>
                                <th>Religion</th>
                                <th>Category</th>
                                <th>Marital status</th>
                                <th>Email</th>
                                <th>Stream</th>
                                <th>College</th>
                            </tr>       
                            <tr class="success">
                                <td><%= @shortterm_course.id %></td>
                                <td><%= @shortterm_course.name %></td>
                                <td><%= @shortterm_course.gender %></td>
                                <td><%= @shortterm_course.religion %></td>
                                <td><%= @shortterm_course.category %></td>
                                <td><%= @shortterm_course.marital_status %></td>
                                <td><%= @shortterm_course.email %></td>
                                <td><%= @shortterm_course.stream %></td>
                                <td><%= @shortterm_course.college %></td>
                            </tr>    
                      </table>   
                      <table class="table table-striped table-hover">          
                            <tr>    
                                <th>University</th>
                                <th>City</th>
                                <th>District</th>
                                <th>State</th>
                                <th>Position</th>
                                <th>Payscale</th>
                                <th>Subject</th>
                                <th>Std Code</th>
                                <th>Landline</th>
                            </tr>
                            <tr class="success">
                                <td><%= @shortterm_course.university %></td>
                                <td><%= @shortterm_course.city %></td>
                                <td><%= @shortterm_course.district %></td>
                                <td><%= @shortterm_course.state %></td>
                                <td><%= @shortterm_course.position %></td>
                                <td><%= @shortterm_course.payscale %></td>
                                <td><%= @shortterm_course.subject %></td>
                                <td><%= @shortterm_course.std_code %></td>
                                <td><%= @shortterm_course.landline %></td>
                            </tr>
                      </table>                
                      <table class="table table-striped table-hover">          
                            <tr>    
                                <th>Mobile</th>
                                <th>University pin</th>
                                <th>Dob</th>
                                <th>Date of joining</th>
                                <th>Preferred date1</th>
                                <th>Preferred date2</th>
                                <th>Residential address</th>
                                <th>Pin</th>
                                <th>Phd</th>
                            </tr>
                            <tr class="success">    
                                <td><%= @shortterm_course.mobile %></td>
                                <td><%= @shortterm_course.university_pin %></td>
                                <td><%= @shortterm_course.dob %></td>
                                <td><%= @shortterm_course.date_of_joining %></td>
                                <td><%= @shortterm_course.pref_date1 %></td>
                                <td><%= @shortterm_course.pref_date2 %></td>
                                <td><%= @shortterm_course.res_address %></td>
                                <td><%= @shortterm_course.pin %></td>
                                <td><%= @shortterm_course.phd %></td>
                            </tr>        
                      </table>
                </div>
                <!-- /.table-responsive -->    
            <%= link_to 'Edit', edit_shortterm_course_path(@shortterm_course), :class => 'btn btn-default' %>
            <%= link_to 'Delete', shortterm_course_path, method: :delete, :class => 'btn btn-default', data: { confirm: 'Are you sure?' } %> 
            <%= link_to 'Back', shortterm_record_path, :class => 'btn btn-default' %>
        </div>
        <!-- /.col-lg-12 -->    

</div>
<!-- /. row -->

shortterm_courses_controller.rb

class ShorttermCoursesController < ApplicationController
  before_filter :authenticate_admin!, :only => [:show, :edit, :update, :destroy, :record]
  layout "adminDashboard", :only => [:show, :edit, :update, :destroy, :record]

  # GET /shortterm_courses
  # GET /shortterm_courses.json
  def index
    raise ActionController::RoutingError.new('Not Found')      
  end
  # GET /shortterm_courses/1
  # GET /shortterm_courses/1.json
  def show
    @shortterm_course = ShorttermCourse.find(params[:id])

    respond_to do |format|
      format.html # show.html.erb
      format.json { render json: @shortterm_course }
    end
  end

  #List of record
  def record
    @shortterm_courses = Kaminari.paginate_array(ShorttermCourse.all).page(params[:page]).per(4)
    respond_to do |format|
      format.html 
      format.json { render json: @shortterm_courses }
    end
  end

  # GET /shortterm_courses/new
  # GET /shortterm_courses/new.json
  def new
    @shortterm_course = ShorttermCourse.new

    respond_to do |format|
      format.html # new.html.erb
      format.json { render json: @shortterm_course }
    end
  end

  # GET /shortterm_courses/1/edit
  def edit
    @shortterm_course = ShorttermCourse.find(params[:id])
  end

  # POST /shortterm_courses
  # POST /shortterm_courses.json
  def create
    @shortterm_course = ShorttermCourse.new(params[:shortterm_course])

    respond_to do |format|
      if @shortterm_course.save
        format.html { redirect_to registered_path }
        format.json { render json: @shortterm_course, status: :created, location: @shortterm_course }
      else
        format.html { render action: "new" }
        format.json { render json: @shortterm_course.errors, status: :unprocessable_entity }
      end
    end
  end

  # PUT /shortterm_courses/1
  # PUT /shortterm_courses/1.json
  def update
    @shortterm_course = ShorttermCourse.find(params[:id])

    respond_to do |format|
      if @shortterm_course.update_attributes(params[:shortterm_course])
        format.html { redirect_to @shortterm_course, notice: 'Shortterm course was successfully updated.' }
        format.json { head :no_content }
      else
        format.html { render action: "edit" }
        format.json { render json: @shortterm_course.errors, status: :unprocessable_entity }
      end
    end
  end

  # DELETE /shortterm_courses/1
  # DELETE /shortterm_courses/1.json
  def destroy
    @shortterm_course = ShorttermCourse.find(params[:id])
    @shortterm_course.destroy

    respond_to do |format|
      format.html { redirect_to shortterm_record_path}
      format.json { head :no_content }
    end
  end
end

shortterm_course.rb

class ShorttermCourse < ActiveRecord::Base
  belongs_to :course
  attr_accessible :category, :city, :college, :subject, :date_of_joining, :district, :dob, :email, :gender, :landline, :marital_status, :mobile, :name, :payscale, :phd, :pin, :position, :pref_date1, :pref_date2, :religion, :res_address, :state, :stream, :university, :university_pin, :std_code, :alternate_email, :image, :course_id
  mount_uploader :image, ImageUploader
end

OrientationCourse模型类似于ShorttermCourse模型,因此OrientationCourse的代码类似。

我无法弄清楚问题是什么。我已经查看了以下问题Carrierwave NoMethodError: undefined method `image_url' for Item,但我的问题不同。

所以,请帮助我。谢谢你!

1 个答案:

答案 0 :(得分:0)

应为@shortterm_course.image.url(:thumb)