简体   繁体   中英

syntax error, unexpected '\n', expecting :: or '[' or '.'

I am trying to have an image uploader on my app using Paperclip, and my only problem is that I keep getting an Undefined Method error. I have it set up on github, https://github.com/BBaughn1/savagelysaving

My User Controller:

class UserController < ApplicationController
    def create
      @user = User.create( user_params )
    end

    def destroy
        @user.image = nil
        @user.save
    end

    private

    # Use strong_parameters for attribute whitelisting
    # Be sure to update your create() and update() controller methods.

    def user_params
      params.require(:user).permit(:image)
    end
end

Then my Show.html.erb file:

    <div id="post_content">
  <h1 class="title">
    <%= @post.title %>
  </h1>

  <p class="date">
    Submitted <%= time_ago_in_words(@post.created_at) %> Ago
    <% if user_signed_in? %>
      | <%= link_to 'Edit', edit_post_path(@post) %>
      | <%= link_to "Delete", post_path(@post), method: :delete, data: { confirm: 'Are you sure?' } %>
    <% end %>
  </p>

  <p class="body">
    <%= @post.body %>
    <%= image_tag @post.image.url(:medium) %>
  </p>

  <div id="comments">
    <%= render 'disqus' %>
  </div>
</div>

In my post.rb file:

class Post < ActiveRecord::Base
  has_many :comments, dependent: :destroy
  validates :title, presence: true, length: { minimum: 5 }
  validates :body, presence: true

  attr_accessor :image

  has_attached_file :image, styles: { medium: "300x300>", thumb: "100x100#" }, default_url: "/images/:style/missing.png"
  validates_attachment_content_type :image, content_type: /\Aimage\/.*\Z/
end

in my development.rb file:

Rails.application.configure do
  ***STUFF***

  Paperclip.options[:command_path] = "/usr/local/bin/"

end and posts controller:

 class PostsController < ApplicationController
  # before_action :find_post, only: [:show, :edit, :update, :destroy]
  before_action :authenticate_user!, except: [:index, :show]

  def index
    @posts = Post.all.order('created_at DESC')
  end

  def new
    @post = Post.new
    attr_accessor :image
  end

  def create
    attr_accessor :image 
    @post = Post.new(post_params)
    if @post.save
      redirect_to @post
    else
      render 'new'
    end
  end

  def show
    @post = Post.find(params[:id])
  end

  def edit
    @post = Post.find(params[:id])
  end

  def update
    @post = Post.find(params[:id])
    attr_accessor :image
    if @post.update(params[:post].permit(:title, :body, :image))
      redirect_to @post
    else
      render 'edit'
    end
  end

  def destroy
    @post = Post.find(params[:id])
    @post.destroy

    redirect_to root_path
  end

  private
    def post_params
      params.require(:post).permit(:title, :body, :image)
    end
end

There is no avatar attribute in your user model but there is an image attribute in your post model.

If you remove below code from user model and move it to post model, the image upload will work

has_attached_file :image, styles: { medium: "300x300>", thumb: "100x100>" }, default_url: "/images/:style/missing.png"
validates_attachment_content_type :image, content_type: /\Aimage\/.*\Z/

This should fix the bug.

I looked at your github to see if you made the same mistake I did. I think you forgot to add imagemagick to your development.rb file. When you install imagemagick on your local machine, it need to see where it's installed; which convert where show where. It might look like this Paperclip.options[:command_path] = "/usr/local/bin/" if not, just copy what it show you and edit what's in the quotes " ".

I hope that helps I know I was having some trouble getting it to work.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM