2016-01-15 2 views
1

Все курсы показываются на index.html.erb, и я пытаюсь просмотреть отдельный курс, нажав на просмотр больше. Который должен ссылаться на путь показа, насколько я понимаю, он показывает этот индивидуальный курс. Какой результат мне нужен.ActiveRecord :: RecordNotFound in CoursesController # show

Однако рельсы проходные этой ошибки на URL http://ruby-on-rails-102039.nitrousapp.com:3000/courses/rails (в пределах этого URL рельсов названия курса, название создаются с каждым новым курсом.

ActiveRecord::RecordNotFound in CoursesController#show 
Couldn't find Course with 'id'=rails 

Extracted source (around line #7): 

def show @course = Course.find(params[:id]) end 

контроллер курса

class CoursesController < ApplicationController 
def index 
@courses = Course.all 
end 

def show 
@course = Course.find(params[:id]) 
end 

Маршруты

devise_for :users 
root 'signups#new' 
resources :signups, only: [:new, :create] 

resources :courses 

Prefix Verb URI Pattern  Controller#Action 
root GET / signups#new 

    root GET /       signups#new 
    signups POST /signups(.:format)    signups#create 
new_signup GET /signups/new(.:format)   signups#new 
    courses GET /courses(.:format)    courses#index 
POST /courses(.:format)    courses#create 
new_course GET /courses/new(.:format)   courses#new 
edit_course GET /courses/:id/edit(.:format) courses#edit 
course GET /courses/:id(.:format)   courses#show 
PATCH /courses/:id(.:format)   courses#update 
PUT /courses/:id(.:format)   courses#update 
DELETE /courses/:id(.:format)   courses#destroy 

index.html.erb

<div id="course-index"> 
    <%@courses.each_slice(4) do|course| %> 

    <div class ="row"> 
    <% course.each do |course|%> 
    <div class="col-md-3 col-sm-3"> 
    <h3><%= course.title %></h3><br /> 
    <h3><%= course. description %></h3><br /> 

    <%= link_to 'View More', course_path(course), class:'btn btn-primary' %> 
</div> 
    <%end%> 
    </div> 
    <%end%> 
</div> 

Модель

class CreateCourses < ActiveRecord::Migration 
def change 
create_table :courses do |t| 
    t.string :title 
    t.string :desciption 
    t.integer :course_id 

    t.timestamps null: false 
    end 
    end 
    end 

show.html.erb

<h1>Courses#show</h1> 
<h1><%= @course.title %></h1> 
<p> <%= @course.description %></p> 

Решение: Все три из них работали в методе шоу. Я просто не понимаю, почему @course = Course.find (params [: id]). Это потому, что у меня есть эти столбцы, определенные в модели.

@course = Course.find_by(params[:title]) 
@course = Course.find_by(params[:course_id]) 
@course = Course.find_by(params[:description]) 
+0

Можете ли вы показать нам, как выглядит ваша таблица курсов, то есть какие столбцы вы определили. Я думаю, файл миграции, в который вы добавили курс, должен делать все. –

+0

Кажется, у вас есть два вложенных каждого цикла, определяющих курс, вы хотели это сделать? Я понятия не имею, что происходит, но выглядит немного странно. – Tim

+0

@Tim. OP выводит курсоры 4 в строку - вот почему есть вложенные циклы - переменные имена для переменных цикла не велики –

ответ

1

@course = Course.find(params[:id]) находит курс по количеству ид, но вы передаете в названии вместо идентификационного номера. Если то, как вы хотите, чтобы держать его

@course = Course.find_by(title: params[:id]) 

вероятно, будет делать то, что вы хотите

+0

Добавлено ваше решение как работающее на меня, со всеми столбцами модели в таблице. Знаете ли вы, почему @course = Course.find_by (название: params [: id]) не работает? – user3905353

+0

Извините - я не понимаю вопроса? Вы говорите, что это сработало для вас, но потом спрашивайте, почему это не работает? –

+0

Он работает, когда я удаляю

<% = course.title%>

и

<% = курс.описание%>

из show.html.erb. Если вы хотите, чтобы он работал с show.html.erb с курсом.title, course.description, я должен использовать решение, которое я разместил наверху. Я говорил, что params [: id] сам по себе не будет работать. – user3905353

0

вы можете попробовать это:

#route.rb 
resources :courses, params :title 

этот маршрут: course GET /courses/:id(.:format) courses#show

стать, как это: course GET /courses/:title(.:format) courses#show

#controller.rb 

#like said Tom Walpole you can do this: 
@course = Course.find_by(title: params[:title]) 
#but I prefer this syntax: 
@course = Course.find_by_title(params[:title]) 

Если у вас есть ошибка, попробуйте это в viex: course_path(course.title)

Смежные вопросы