0

Я новичок в рельсах, и в первый раз я работаю с pgsql. То, как мой проект настроен, требует, чтобы песня не могла быть создана без исполнителя. Для этого я использовал вложенные маршруты, чтобы идентификатор сохранялся. Моя проблема в том, что я пытаюсь создать индекс для всех исполнителей и песни независимо от исполнителя. Но я получаю ошибку ниже в обоих случаях:Создание общего индекса при использовании вложенных маршрутов

No route matches {:action=>"edit", :controller=>"users", :id=>nil} 

в моих маршрутах файл:

resources :users do 
    resources :songs do 
     get 'approve', on: :member 
     get 'decline', on: :member 
    end 
    end 

    resources :songs 

в контроллере пользователей

def index 
    @users = User.all 
    end 


def edit 
    @user = User.find(params[:id]) 
    end 

В контроллере песни

def index 
     @songs = Song.all 
    end 
    def create 
     @song = current_user.songs.build(params[:song]) 
     if @song.save 
      #Send confirmation email 
      @song.submit 
      flash[:success] = "Song created!" 
      redirect_to user_path(current_user) 
     else 
      render 'new' 
     end 
    end 
def edit 
     @song = current_user.songs.find_by_id(params[:id]) 
    end 

В представлении индекса пользователей

<%= render @users %> 

и частичный вид пользователя

<li> 
    <%= link_to user.name, user %> 
    <% if current_user.admin? && !current_user?(user) %> 
     | <%= link_to "delete", user, method: :delete, 
             data: { confim: "You sure?" } %> 
    <% end %> 
</li> 

Оба пользователя и песни Индексный похожи, так что я думаю, размещение и является излишним.

И это выход из моего development.log файла

Started GET "/users" for 127.0.0.1 at 2013-07-07 13:26:17 -0500 
Processing by UsersController#index as HTML 
    [1m[35mUser Load (0.3ms)[0m SELECT "users".* FROM "users" 
    Rendered users/index.html.erb within layouts/application (0.6ms) 
    Rendered layouts/_shim.html.erb (0.0ms) 
    [1m[36mUser Load (0.5ms)[0m [1mSELECT "users".* FROM "users" WHERE "users"."remember_token" = 'PTlmu8452Oan4mX1SLHOnA' LIMIT 1[0m 
    Rendered layouts/_header.html.erb (3.9ms) 
Completed 500 Internal Server Error in 62ms 

ActionController::RoutingError (No route matches {:action=>"edit", :controller=>"users", :id=>nil}): 
    app/views/layouts/_header.html.erb:15:in `_app_views_layouts__header_html_erb___3568227543968708446_70195568870980' 
    app/views/layouts/application.html.erb:11:in `_app_views_layouts_application_html_erb___4424773992888194134_70195568771540' 


    Rendered /usr/local/rvm/gems/ruby-1.9.3-p194/gems/actionpack-3.2.13/lib/action_dispatch/middleware/templates/rescues/routing_error.erb within rescues/layout (0.8ms) 

ли указательный работу по-разному с PostgreSQL? Или я ошибаюсь или что-то здесь не вижу? У меня никогда не было этой проблемы с sqlite3, но, как я уже сказал, это мой первый опыт работы с pgsql. Мне нужна помощь, спасибо!

+0

Параметр 'index'es в коде выше * действия * на * контроллерах * и ортогональны индексов в вашей базе данных (независимо от движка). – Johnsyweb

+0

Ok @Johnsyweb, так почему я получаю эту ошибку? Я не думаю, что я сделал что-то не так, поэтому он должен работать нормально. –

+1

Просто прочтите dev log: ошибка исходит от частичного имени _header в строке 15 (app/views/layouts/_header.html.erb: 15). Вставьте это, если вам нужна дополнительная помощь. –

ответ

1

Похоже, вы пытаетесь установить ссылку на страницу редактирования без параметра id, ведьма неверна.

Он должен быть маршруты направо: редактировать действие с: идентификатор параметра, как это,

<%= link_to "Edit user", edit_user_path(user.id) %> 
+0

У меня нет ссылки для редактирования в моем индексном представлении –

+0

Если у вас нет ссылки на редактирование, она не должна поднимать ошибку маршрута, перенаправляемую для редактирования ссылки –

+1

Спасибо, я исправил ее –

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