Ошибка синтаксиса контроллера и проблема с базой данных

#ruby-on-rails #database #controller

#ruby-on-rails #База данных #контроллер

Вопрос:

Я создаю базу данных и получаю проблемы с контроллером, соответствующим списку, показать, создать и т. Д. Действия. Это мой код контроллера:

 class SkillsController < ApplicationController
  def list
    @skills = Skill.all
   end

   def show
    @skills = Skill.find(params[:id])
   end

   def new
    @skills = Skill.all

   end

   def create
        @skills = Skill.new(params[:skill])
      if @skills.save
            redirect_to :action => 'list'
      else
            @skills = Skill.find(:all)
            render :action => 'new'
      end
   end

   def edit
    @skills = Skill.find(params[:id])
    @skills = Skill.find(:all)
   end

   def update
       @skills = Skill.find(params[:id])
      if @skills.update_attributes(params[:skill])
         redirect_to :action => 'show', :id => @skills
      else
         @skills = Skill.find(:all)
         render :action => 'edit'
      end
   end

   def delete
    Skill.find(params[:id]).destroy
    redirect_to :action => 'list'
   end

     def show_skills
      @skills = Skill.find(params[:id])
   end
end
  

Моя ошибка при попытке перейти на localhost: 3000: skills / list:

 ActiveRecord::RecordNotFound in SkillsController#show
Couldn't find Skill with 'id'=list
  

и эта строка кода выделяется как проблемная область:

         @skills = Skill.find(params[:id])
  

Я предполагаю, что мои навыки неправильно построены для получения идентификаторов, но я не уверен, и я прочитал, что это было сгенерировано автоматически без объявления таблиц, которые будут иметь идентификаторы. Спасибо всем, кто знает, в чем моя проблема, и я надеюсь, что это простая синтаксическая ошибка. Приветствия и еще раз спасибо.

Я попытался изменить его на Skill.all, и теперь я получаю ошибку отсутствующего шаблона. Он не ищет в моем каталоге views / skills шаблоны, и я не знаю почему. Если у кого-нибудь также есть какие-либо советы по этому поводу, мы будем очень признательны. Еще раз спасибо и удачи! ^^^^^^^^^^^^^^^^^^^ решаемая^^^^^^^^^^^^^^^^^^

Это представление list.rhtml:

 <% if @skills.blank? %>
  <p>There are not any skills currently saved in the system.</p>
<% else %>
  <p>These are the current skills saved in our system</p>
  <ul id="skills">
    <% @skills.each do |c| %>
      <li><%= link_to c.title, {:action => 'show', :id => c.id} -%></li>
    <% end %>
  </ul>
<% end %>

<p><%= link_to "Add new Skill", {:action => 'new' }%></p>    

<li>
      <%= link_to c.title, {:action => 'show', :id => c.id} -%>
  <b> <%= link_to 'Edit', {:action => 'edit', :id => c.id} %></b>
  <b> <%= link_to "Delete", {:action => 'delete', :id => c.id},
                             :confirm => "Are you sure you want to delete this skill??" %></b>
</li>
  

Я разобрался с проблемой контроллера, и теперь у меня проблема только с представлением выше. Ошибка:

  /app/views/skills/index.html.erb where line #16 raised:

undefined local variable or method `c' for #<#<Class:0x000000055b1620>:0x0000000413d338>
  

и конкретная строка, на которую она указывает, это:

  <%= link_to c.title, {:action => 'show', :id => c.id} -%>
  

Я думаю, что c.id это недопустимый параметр для моей базы данных, но я не уверен. Я буду продолжать пытаться это исправить и благодарю всех, кто что-нибудь знает.

Комментарии:

1. да, публикую это сейчас выше.

2. Итак, вам нужно либо переименовать это представление в be show.rhtml , либо следовать решению @PeterSorowka. Отсутствующий шаблон возникает из-за того, что действие show ищет show шаблон, о котором оно не знает list.rhtml .

3. Я вижу! спасибо, я продолжу и попытаюсь это исправить.

4. Я изменил list.rhtml на show.rhtml и до сих пор получаю эту ошибку::::Шаблон отсутствует, отсутствуют шаблонные навыки / показать, приложение / показать с {:locale=>[:en], :formats=> [:html],:variants=>[], :обработчики =>[: erb, :builder, :raw, :ruby, :jbuilder, :coffee]} . Искал в: * «C:/HandCoOp/project/HandCoOp/app/views » * «C:/Ruby200-x64/lib/ruby/gems/2.0.0/gems/devise-3.2.4/app/views »

5. Ваши драгоценные камни ruby и rails предполагают, что вы определенно используете Rails 3 . Почему у вас есть rhtml расширение? Попробуйте изменить расширение этого файла на .html.erb . Это старый проект, созданный из Rails 2?

Ответ №1:

Вы получаете сообщение об ошибке, потому что вы неправильно (или неправильно) настроили маршрут для list действия. В настоящее время rails ошибочно перенаправляет вас к show действию для элемента с идентификатором ‘list’, который, очевидно, не существует.

Имя rails по умолчанию для list действия — index и маршрут по умолчанию для этого будет просто localhost: 3000 / skills/ Если вы хотите пойти по этому пути, вам не нужно ничего менять, кроме имени метода в контроллере.

Если вы хотите использовать путь localhost:3000/skills/list для вызова метода list в вашем контроллере, вам необходимо изменить свой config/routes.rb файл, чтобы он содержал

 resources :skills do 
  get 'list'
end
  

Комментарии:

1. Спасибо, что это сработало, я получаю новую ошибку для index.html.erb, но я добавлю ошибку ниже index.html.erb выше.