Как исправить рельсы Не удалось найти сообщение без ошибки идентификатора

Я новичок в рельсах и мало знаю о рубине, я только что посмотрел учебник из Rails Guide 4.0. Все шло нормально, просто застрял на одной ошибке: Не удалось найти сообщение без идентификатора.

Я сделал все как в Rails Guide Getting Started Of Rails.

Вот код из руководства по рельсам:

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

и вот код просмотра:

<p>
  <strong>Title:</strong>
  <%= @posts.title %>
</p>

<p>
  <strong>Text:</strong>
  <%= @posts.text %>
</p>

После того, как это руководство по коду Rails скажет, что вы, наконец, сможете создавать новые сообщения. Посетите localhost:3000/posts/new и попробуйте!. Но после создания нового поста он показывает мне ошибку.

Я подумал, что это может быть проблемой, потому что я еще не создал действие индекса, поэтому я сделал с индексом. После действия индекса, когда я пытаюсь посетить этот адрес, обычно он должен отображать все записи из базы данных, а не отображать запись, показывающую ту же ошибку: Cann' не найти сообщение без идентификатора

Я пробовал слишком много сообщений в stackoverflow, но все они были связаны с некоторыми другими действиями, которые мне не нужны.

Пожалуйста, помогите мне решить эту проблему, я просто думаю, что этого не должно быть, потому что я следую руководству по рельсам.

Я следую руководству по началу работы с рельсами, поскольку в нем сказано, что я добавил действие index и show action. Так как в книге сказано, что с индексным действием, когда вы посещаете этот адрес / сообщения, вы должны видеть все сообщения, а когда вы создаете новое сообщение, оно будет перенаправлено, чтобы показать последнее сообщение, которое вы ввели,

Я использовал redirect_to @post, но это происходит с ошибкой, которую я застрял, тогда я использую redirect_to action: :show, id: @post.id

он работает, когда я создаю новый пост, затем он перенаправляется на /posts?id=last_inserted_id, но, как я видел, другой адрес каркаса должен быть posts/1 или т. д., и когда я посещаю /posts, он должен показывать все действия сообщений, определенные как индекс в контроллере .

routes.rb

<code>
  Blog::Application.routes.draw do
  root "welcome#new"

  resource :posts
</code>

Контроллер:

class PostsController < ApplicationController


  def index
    @post = Post.all
    respond_to do |format|
      format.html #index.html.erb
    end
  end

  def show
    @post = Post.find(params[:id])
    respond_to do |format|
      format.html #show.html.erb
    end
  end

  def new

  end

  def create
    @post = Post.new post_params
    @post.save
    redirect_to action: :show, id: @post.id
  end

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

Спасибо


person Mandeep Gill    schedule 10.11.2013    source источник
comment
1. покажите, как вы создаете ссылку, чтобы показать действие (вставьте свой код из представления). 2. Если вы определяете маршруты для сообщений НЕ как resources :posts, вы также должны показывать свои маршруты.   -  person gotva    schedule 10.11.2013
comment
1 : я добавляю действие в адресную строку следующим образом: /posts/etc 2 : я использую ресурсы :posts   -  person Mandeep Gill    schedule 10.11.2013
comment
как /posts/1 ? а что вы видите в логе сервера (или в development.log)?   -  person gotva    schedule 10.11.2013
comment
эта ошибка при записи /posts/1 --- Маршрут не соответствует [GET] /posts/1   -  person Mandeep Gill    schedule 10.11.2013
comment
что-то не так с маршрутизацией. Что именно вы пишете в адресной строке, когда получаете ошибку Couldn't find Post without an ID? Опубликуйте свой routes.rb - потому что resources :posts должен добавить маршрут для 127.0.0.1:3000/posts/1, и вы можете получить ошибку Post with id=1 not found, но не No route matches...   -  person gotva    schedule 10.11.2013
comment
Только что отредактировал мой вопрос, так как в поле для комментариев отображается слишком много строк, пожалуйста, прочитайте в конце.   -  person Mandeep Gill    schedule 10.11.2013


Ответы (1)


Вы должны использовать resources :posts, а не resource!

resources генерирует «полный» CRUD — 7 действий http://api.rubyonrails.org/classes/ActionDispatch/Routing/Mapper/Resources.html#method-i-resources

когда resource генерирует уникальный ресурс маршрутов (без действия show) http://api.rubyonrails.org/classes/ActionDispatch/Routing/Mapper/Resources.html#method-i-resource

person gotva    schedule 10.11.2013
comment
Спасибо за решение моей проблемы, - person Mandeep Gill; 10.11.2013