2014-01-29 4 views
5

Моих сообщений об ошибке "неверное числе аргументов (0 для 1)"Rails: неверное число аргументов (0 для 1) для .destroy

для этой линии: @post = Post.destroy в моем

PostsController#destroy 

у меня есть модель, которая post.rb

Мои сообщения контроллер здесь

class PostsController < ApplicationController 
    def new 
    @post = Post.new 
    end 

    def index 
    @posts = Post.all 
    end 

    def create 
    @post = Post.new(post_params) 

    if @post.save 
     redirect_to @post 
    else 
     render 'new' 
    end 
    end 

    def post_params 
    params.require(:post).permit(:title, :text) 
    end 

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

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

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

    if @post.update(params[:post].permit(:title, :text)) 
     redirect_to @post 
    else 
     render 'edit' 
    end 
    end 

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

    redirect_to posts_path 
    end 

end 

на мой взгляд, у меня есть этот код:

<%= link_to 'Destroy', post_path(post), 
    method: :delete, data: { confirm: 'Are you sure?' } %> 

Это то, что он говорит, что я для параметров в запросе

{"_method"=>"delete", 
"authenticity_token"=>"Pzsnxv8pt+34KIKpYqfZquDv3UpihkINGSJxomMNsW4=", 
"id"=>"3"} 

Что, черт возьми, я делаю неправильно ??

ответ

8

Вы должны предоставить ID методу destroy:

Post.destroy(params[:id]) 

Как указано здесь: http://api.rubyonrails.org/classes/ActiveRecord/Relation.html#method-i-destroy

+0

Хорошо, вопрос, хотя зачем мне даже нужно делать Post.find до этого, если я только что прошел .destroy: id? – camdixon

+0

Ну, вам не нужно его искать. Просто передайте идентификатор и уничтожьте его. – MurifoX

3

именно то, что говорит об ошибке.

Вы можете:

  • Вызов destroy на экземпляре, без аргумента, например, @post.destroy
  • На классе с идентификатором, например, Post.destroy(an_id)
2

Я предполагаю, что вы хотите написать :

@post.destroy 
4

В этом ваша проблема:

@post = Post.destroy 

В Ruby вы можете уничтожить объект таким образом:

@post.destroy 

Еще один совет: когда вы используете переменные только внутри модели или контроллера, объявить их как местные жители, не добавляя @ перед ними и используйте @ только для переменных, которые нужно использовать глобально. Узнайте больше об этом здесь: In what circumstances should I use instance variables instead of other variable types?

Смежные вопросы