未定义的方法`url&#39;对于#<activerecord :: associations :: collectionproxy [] =“”>

时间:2016-07-15 08:58:04

标签: ruby-on-rails carrierwave

这是我的Post控制器创建操作:

def create
  @user = current_user
  @post = @user.posts.create(post_params)

  respond_to do |format|
    if @post.save
      format.html { redirect_to @post, notice: 'Post was successfully created.' }
      format.json { render :show, status: :created, location: @post }
    else
      format.html { render :new }
      format.json { render json: @post.errors, status: :unprocessable_entity }
    end
  end

私人:

def post_params

params.require(:柱).permit(         :title,:description,:size,images_attributes [:id,:image,:imageable_id,:imageable_type])

这是show.html.erb

(<%= image_tag @post.images.url %>)

这是Post型号:

class Post < ActiveRecord::Base
  belongs_to :user
  has_many :images, as: :imageable
  accepts_nested_attributes_for :images
end

这是Image型号:

class Image < ActiveRecord::Base
  belongs_to :imageable, polymorphic: true
  mount_uploader :image, ImageUploader
end

2 个答案:

答案 0 :(得分:1)

看起来您正在使用Carrierwave并将其安装在Image模型的image属性上。因此,这样的事情可能会奏效:

<% @post.images.each do |image| %>
  <%= image_tag image.image_url(:original) %>
<% end %>

您可以将:original替换为您的carrierwave上传器文件创建的任何版本

答案 1 :(得分:0)

<%= image_tag @post.images %>提供的collections of images属于@post

要渲染帖子的图像,请执行以下操作:

<% @post.images.each do |img| %>
  <%= image_tag img.url %>
<% end %>