Как да коригирам релсите. Не можах да намеря публикация без ID грешка

Аз съм нов в релсите и малко знам за ruby, току-що гледах урок от Rails Guide 4.0. Всичко вървеше добре, просто останах на една грешка: Не можах да намеря публикация без идентификатор.

Направих всичко както в Rails Guide Getting Started Of Rails.

Ето код от rails guide:

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

и ето кода за преглед:

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

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

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

Мислех, че това може да е проблем, защото все още не съм създал действие за индексиране, така че приключих с индекса. След действието за индексиране, когато се опитам да посетя този адрес, обикновено той трябва да показва всички записи от базата данни, но по-скоро да показва запис, показващ същата грешка: Не може не намирам публикация без идентификатор

Опитах твърде много публикации в stackoverflow, но всички свързани с някои други действия, които не са полезни за мен.

Моля, помогнете ми да поправя този проблем, просто си мисля, че не трябва да е така, защото следвам ръководството за релси.

Следвам ръководството за започване на релси, тъй като каза, че добавих действие за индексиране и действие за показване. Така че, както в книгата се казва с действие за индексиране, когато посетите този адрес / публикации, трябва да видите всички публикации и когато създадете нова публикация, тя ще пренасочи, за да покаже последната публикация, която сте въвели,

Използвах 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
smth не е наред с маршрутизирането. Какво точно пишете в адресната лента, когато получите грешка 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)


Благодаря - в крайна сметка хвърлих началните стойности в self.dict и след това промених dict от функцията за кликване. Работи във връзка с решението, което пропуснах и което беше предложено вчера! Все пак добър съвет за отстраняване на неизправности, благодаря!
person gotva    schedule 10.11.2013
comment
Благодаря ви, че решихте проблема ми, - person Mandeep Gill; 10.11.2013