使用回形针添加多个图像

时间:2015-03-09 01:15:22

标签: ruby-on-rails

我在使用回形针上传多个文件时遇到问题。 我试着在这里遵循这个指南 guide

我的模型的结构是:

用户has_many trip_images

然后trip_images has_attached_file:照片

尝试上传新照片时没有任何错误,但我无法在用户显示视图中显示它们。我很确定这不仅仅是这里的错误观点。

错误:

unexpected keyword_do, expecting keyword_end '; @trip_images do |t| ^ C:/row/map/app/views/user/show.html.erb:22: syntax error, unexpected keyword_ensure, expecting end-of-input

到目前为止,这就是我所拥有的。

user.rb

has_many :trip_images, :dependent => :destroy

trip_image.rb

belongs_to :user
has_attached_file :photo
validates_attachment_presence :photo

user_controller.rb

    def show
        @user = User.find(params[:id])
        @trip_images = @user.trip_images
      end
          ...    
      def create
        @user = User.new(user_params)

        if @user.save
          if params[:photos]
              params[:photos].each { |photo|
              @user.trip_images.create(photo: photo) }
          end
            redirect_to(:action => 'index')

        else
          render('new')
        end
      end
... 

private

    def user_params
      params.require(:user).permit(:name, :email, :trip_images, :photo)
    end

trip_images_controller.rb 已移除

    def index

        @user = user.find(params[:user_id])

        @trip_images = @user.trip_images

        respond_to do |format|
          format.html # index.html.erb
          format.json { render json: @trip_images }
        end
      end

      # GET /trip_images/1
      # GET /trip_images/1.json
      def show
        @trip_image = trip_image.find(params[:id])

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

      # GET /trip_images/new
      # GET /trip_images/new.json
      def new
        @user = user.find(params[:user_id])
        @trip_image = @user.trip_images.build

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

      # GET /trip_images/1/edit
      def edit
        #@user = user.find(params[:user_id])

        @trip_image = trip_image.find(params[:id])
        # @trip_image = trip_image.find(params[:id])
      end

      # POST /trip_images
      # POST /trip_images.json
      def create
        @trip_image = trip_image.new(params[:trip_image])

        if @trip_image.save
          respond_to do |format|
            format.html {
              render :json => [@trip_image.to_jq_upload].to_json,
              :content_type => 'text/html',
              :layout => false
            }
            format.json {
              render :json => [@trip_image.to_jq_upload].to_json
            }
          end
        else
          render :json => [{:error => "custom_failure"}], :status => 304
        end
      end
....
 private

  def trip_image_params
    params.require(:trip_image).permit(:description, :user_id, :photo)
  end

用户/ show.html.erb

<% @trip_images do |t| %> 
  <%= t.photo_file_name %>
  <%= image_tag t.photo_url %>
<% end %>

因此,在最后一次运行中,我希望用户上传照片,然后在各自的“显示”视图中显示这些照片。

谢谢你的时间!

1 个答案:

答案 0 :(得分:0)

您的代码存在一些问题:

  • 不需要TripImages控制器 - 您正在从用户进行渲染
  • 修改用户/ show.html.erb:

<% @trip_images do |t| %> <%= t.photo_file_name %> <%= image_tag t.photo_url %> <% end %>

这是一篇关于这个主题的好文章:http://www.railscook.com/recipes/multiple-files-upload-with-nested-resource-using-paperclip-in-rails/

Katz和Bigg的“Rails 3 in Action”第9章逐步介绍了实施过程。网上有很多pdf文件。