ActiveRecord :: RecordNotFound - Не удалось найти Keynote без идентификатора - PullRequest
1 голос
/ 05 ноября 2011

Я создаю приложение, которое имеет модель Keynote и модель Story (а также модель User, которую я реализовал с помощью Devise). У Keynotes много историй, а одна история принадлежит ключевому слову.

У меня проблемы с созданием новых историй, и я получаю следующую ошибку:

ActiveRecord :: RecordNotНайдено в StoriesController # create

Не удалось найти Keynote без идентификатора

Ошибка происходит в строке 17 story_controller.rb, которая

@keynote = Keynote.find(params[:keynote_id])

в методе создания.

Это часть моего story_controller.rb

class StoriesController < ApplicationController

  before_filter :authenticate_user!, :except => [:show, :index]

  def index
    @keynote = Keynote.find(params[:keynote_id])
    @stories = @keynote.stories
  end

  def new
    @keynote = Keynote.find(params[:keynote_id])
    @story = @keynote.stories.build
  end

  def create
    if user_signed_in?
      @keynote = Keynote.find(params[:keynote_id])
      @story = @keynote.current_user.stories.build(params[:story])
      if @story.save
        flash[:notice] = 'Question submission succeeded'
        redirect_to keynote_stories_path
      else
        render :action => 'new'
      end
    end
  end

Это мой keynotes_controller.rb

class KeynotesController < ApplicationController
  def index
    @keynotes = Keynote.find :all, :order => 'id ASC'
  end

  def new
    @keynote = Keynote.new
  end

  def show
    @keynote = Keynote.find(params[:id])
  end

  def create
    @keynote = Keynote.new(params[:keynote])
    if @keynote.save
      flash[:notice] = 'Keynote submission succeeded'
      redirect_to keynotes_path
    else
      render :action => 'new'
    end
  end

end

Любая помощь будет очень признательна.

Edit: Это параметры, когда я пытаюсь создать новую историю.

{ "utf8" => "✓", "Authenticity_token" => "76odSpcfpTlnePxr + WBt36fVdiLD2z + Gnkxt / Eu1 / TU =", "История" => { "имя" => "как"}, "Совершить" => "Отправить"}

Похоже, ID для Keynote не передается.

Это представление для StoriesController # new

<%= error_messages_for 'story' %>

<%= form_for @story do |f| %>
    <p>
        Question:<br />
        <%= f.text_field :name %>
    </p>
    <p>
        <%= submit_tag "Ask" %>
    </p>
<% end %>

Это то, что у меня есть в моем файле rout.rb:

  get "keynotes/index"
  get "users/show"
  devise_for :users
  get "votes/create"
  get "stories/index"

  resources :keynotes do
    resources :stories
  end

  resources :stories do
    get 'bin', :on => :collection
    resources :votes
  end

  resources :users

  root :to => 'keynotes#index'

1 Ответ

1 голос
/ 05 ноября 2011

Я думаю, что это должно сработать:

<%= form_for @story do |f| %>
    <%= hidden_field_tag 'keynote_id', @keynote.id  %>
    .
    rest of the form stuff here
    .
<% end %>

PS.Не уверен, что вы получите keynote_id in params[:keynote_id] или params[:story][:keynote_id] .. проверьте оба.

NB: Я думаю, что было бы проще сделать это, используя fields_forчто-то похожее, но у меня нет доступа к настройке Rails, чтобы проверить это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...