CarrierWave undefined方法`image_url'或破碎的图像

时间:2016-01-28 23:41:56

标签: ruby-on-rails undefined carrierwave imageurl carrier

我有许多属于diys的步骤的图像(add_images_to_steps)。所有信息都会在DB浏览器显示时正确保存,但我在查看图像时遇到问题。

与 的视图/小五金/ show.html.erb

    <p id="notice"><%= notice %></p>
    <h2><%= @diy.summary %></h2>
      <% @steps.each do |step| %>
        <p><%= step.step_content %></p>
        <% step.add_images_to_steps.each do |i| %>
          <%= image_tag i.image_url.to_s %>
        <% end %>
    <% end %>

我在Diys#Show中得到NoM​​ethodError

  

未定义的方法`image_url&#39;对于#

如果我改变

  

  

I get this

-------------------------------------------- ---------------------------

继承我的迁移,模型和控制器。

-------------------------------------------- ---------------------------

diys_controller.rb

 class DiysController < ApplicationController
   before_action :set_diy, only: [:show, :edit, :update, :destroy]

 def show
   @diy = Diy.find(params[:id])
   @steps = @diy.steps.all
   @diy.add_images_to_steps.all
 end

 def new
   @diy = Diy.new
   @step = @diy.steps.new
   @step.add_images_to_steps.new
 end

 ...

 def diy_params
   params.require(:diy).permit(:title, :summary, :tip, :warning, steps_attributes: [:step_content, add_images_to_steps_attributes: [:image]])
 end

模型/ diy.rb

class Diy < ActiveRecord::Base
  has_many :steps, dependent: :destroy
  accepts_nested_attributes_for :steps, reject_if: :all_blank
  has_many :add_images_to_steps, :through => :steps, dependent: :destroy
  accepts_nested_attributes_for :add_images_to_steps
end

模型/ step.rb

 class Step < ActiveRecord::Base
   belongs_to :diy
   has_many :add_images_to_steps, dependent: :destroy
   accepts_nested_attributes_for :add_images_to_steps
   mount_uploader :image, ImageUploader
 end

模型/ add_images_to_step.rb

 class AddImagesToStep < ActiveRecord::Base
   belongs_to :step
 end

Diy迁移

 class CreateDiys < ActiveRecord::Migration
   def change
     create_table :diys do |t|
       t.string :title
       t.text :summary
       t.text :tip
       t.text :warning
       t.timestamps null: false
     end
   end
 end

步骤迁移

 class CreateSteps < ActiveRecord::Migration
   def change
     create_table :steps do |t|
       t.belongs_to :diy
       t.text :step_content
       t.timestamps null: false
     end
   end
 end

add_images_to_step migration

 class CreateAddImagesToSteps < ActiveRecord::Migration
   def change
     create_table :add_images_to_steps do |t|
       t.belongs_to :step
       t.string :image
       t.timestamps null: false
     end
   end
 end

1 个答案:

答案 0 :(得分:0)

我明白了!!

必须添加

  

mount_uploader:image,ImageUploader

到../ models / add_images_to_step.rb

将def store_dir更改为

  

&#34;#{Rails.root} /公共/上传/&#34;

在../ app / uploaders / image_uploader.rb

  

&#34;&lt;%= image_tag i.image_url.to_s%&gt;&#34;

适合展示视图。