我有许多属于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中得到NoMethodError
未定义的方法`image_url&#39;对于#
如果我改变
到
-------------------------------------------- ---------------------------
继承我的迁移,模型和控制器。
-------------------------------------------- ---------------------------
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
答案 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;
适合展示视图。