2016-04-28 6 views
0

Я пытаюсь создать базовое приложение Rails/React, которое принимает ряд пользовательских входов, а затем отображает их на экране в шаблоне письма (думаю, MadLibs.) Я следил за несколькими реакциями и у меня есть приличный опыт работы с Rails, но я получил потрясающе зависающий API, который я создал. Для контекста я использую этот tutorial here в качестве руководства, но создаю собственное приложение.Rails: NoMethodError Неопределенный метод

Это мой маршруты файл:

Rails.application.routes.draw do 
    root to: 'site#index' 

    namespace :api do 
    namespace :v1 do 
     resources :letters, only: [:index, :create] 
    end 
    end 
end 

Это мой base_controller.rb файл:

class Api::V1::BaseController < ApplicationController 
    respond_to :json 
end 

и это мой letters_controller.rb файл:

class Api::V1::LettersController < Api::V1::BaseController 
    def index 
     respond_with Letter.all 
    end 

    def create 
     respond_with :api, :v1, Letter.create(letter_params) 
    end 

    private 
     def letter_params 
      params.require(:letter).permit(:id, :param_one, :param_two) 
     end 
end 

Контроллер файлы хранятся в контроллерах/api/v1, и это отражено в файле маршрутов. Я могу использовать индексный метод без проблем и получить все объекты Letter для отображения. Я могу использовать метод create несколько, поскольку новое письмо создается и сохраняется в базе данных (sqlite btw.) Проблема возникает с ответом, так как в нем нет ни одного. Вместо того, чтобы ответ возвращается на мой призыв AJAX я получаю следующее:

NoMethodError (undefined method `api_v1_letter_url' for #<Api::V1::LettersController:0x007f3085f1d300>): 
    app/controllers/api/v1/letters_controller.rb:7:in `create' 

У меня нет землистой идеи, почему это не работает. Из всего, что я читал, подавая ответ response_with, параметры, которые у меня есть, должны привести к возврату возвращаемого URL-адреса и вернуться с ответом. Вместо этого я получаю этот странный 500.

У меня никогда не было так много проблем с программой, что раньше мне давали мигрень. Если кто-то может помочь, он будет очень признателен.

ответ

1

Если вы запустите rake routes, вы увидите, что нет объявления для api_v1_letter_url.

Это потому, что вы не объявляете метод show на routes.rb (вы явно используете только index и create). Если вы хотите, вызов в контроллере, чтобы работать как есть, вам нужен show метод:

Rails.application.routes.draw do 
    root to: 'site#index' 

    namespace :api do 
    namespace :v1 do 
     resources :letters, only: [:index, :create, :show] 
    end 
    end 
end 

Теперь запустите rake routes, вы увидите, что там.

Для реализации show в контроллере:

def show 
    respond_with Letter.find(params[:id]) 
end 
+0

что позаботилась о нем, очень обязан. –