2016-01-01 2 views
0

Я пытаюсь сделать приложение с Rails 4.Rails 4 - леска генератор

я использовал Генерировать эшафот команду для установки контроллера статьи.

В настоящее время выглядит следующим образом:

class ArticlesController < ApplicationController 
    before_action :set_article, only: [:show, :edit, :update, :destroy] 
    before_action :authenticate_user!, except: [:index, :show, :search] 


    respond_to :html, :json 
# GET /articles 
    # GET /articles.json 
    def index 
    query = params[:query].presence || "*" 
    @articles = Article.search(query) 
    end 

    # def index 
    # if params[:query].present? 
    #  @books = Book.search(params[:query], page: params[:page]) 
    # else 
    #  @books = Book.all.page params[:page] 
    # end 
    # end 

    # GET /articles/1 
    # GET /articles/1.json 
    def show 
    end 

    # GET /articles/new 
    def new 
    @article = Article.new 
    end 

    # GET /articles/1/edit 
    def edit 
    end 

    # POST /articles 
    # POST /articles.json 
    def create 
    # before_action :authenticate_user! 
    # authorize @article 
    @article = Article.new(article_params) 

    respond_to do |format| 
     if @article.save 
     format.html { redirect_to(@article) } 
     format.json { render :show, status: :created, location: @article } 
     else 
     format.html { render :new } 
     format.json { render json: @article.errors, status: :unprocessable_entity } 
     end 
    end 
    end 

    def search 
    if params[:search].present? 
     @articless = Article.search(params[:search]) 
    else 
     @articles = Articles.all 
    end 
    end 


    # PATCH/PUT /articles/1 
    # PATCH/PUT /articles/1.json 
    def update 
    # before_action :authenticate_user! 
    authorize @article 
    respond_to do |format| 
     if @article.update(article_params) 
     format.json { render :show, status: :ok, location: @article } 
     else 
     format.html { render :edit } 
     format.json { render json: @article.errors, status: :unprocessable_entity } 
     end 
    end 
    end 

    # DELETE /articles/1 
    # DELETE /articles/1.json 
    def destroy 
    before_action :authenticate_user! 
    authorize @article 
    @article.destroy 
    respond_to do |format| 
     format.json { head :no_content } 
    end 
    end 

    private 
    # Use callbacks to share common setup or constraints between actions. 
    def set_article 
     @article = Article.find(params[:id]) 
    end 

    # Never trust parameters from the scary internet, only allow the white list through. 
    def article_params 
     params[:article].permit(:user_id, :body, :title, :image, 
     comment_attributes: [:opinion]) 
    end 
end 

Я добавил эту строку в верхней части файла:

respond_to :html, :json 

Я нашел эту статью, объясняющую, почему это должно быть там:

http://www.justinweiss.com/articles/respond-to-without-all-the-pain/

Однако, когда я сохраняю свои изменения и стараюсь дата запись в моем файле, я получаю эту ошибку:

ActionController::UnknownFormat in ArticlesController#update 

Точки ошибок к respond_to линии в моем действии обновления:

def update 
    # before_action :authenticate_user! 
    authorize @article 
    respond_to do |format| 
     if @article.update(article_params) 
     format.json { render :show, status: :ok, location: @article } 
     else 
     format.html { render :edit } 
     format.json { render json: @article.errors, status: :unprocessable_entity } 
     end 
    end 
    end 

есть что-то еще требуется, чтобы получить эту работу?

+0

Как вы называете этот метод контроллера? Ошибка, кажется, указывает на то, что сам запрос не представляет себя как формат json или html ... –

ответ

2

Проблема с кодом в:

respond_to do |format| 
    if @article.update(article_params) 
    format.json { render :show, status: :ok, location: @article } 
    else 
    format.html { render :edit } 
    format.json { render json: @article.errors, status: :unprocessable_entity } 
    end 
end 

Вы должны изменить его, чтобы вернуться из сферы от того, если будет так:

respond_to do |format| 
    if @article.update(article_params) 
    format.json { render :show, status: :ok, location: @article } 
    else 
    format.json { render json: @article.errors, status: :unprocessable_entity } 
    end 
    format.html { render :edit } 
end 
+0

Спасибо. Это сработало. Интересно, почему генератор эшафот создает что-то, что не работает? – Mel