0

私はレールに不慣れで、初めてpgsqlを使用しています。私のプロジェクトのセットアップ方法では、アーティストなしでは曲を作成できないことが必要です。これを達成するために、ネストされたルートを使用して、ID が持続するようにしました。私の問題は、アーティストに関係なく、すべてのアーティストと曲のインデックスを作成しようとしていることです。しかし、どちらの場合も以下のエラーが発生します。

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 を使用するのはこれが初めてです。助けが必要です、ありがとう!

4

1 に答える 1

1

:id パラメータなしで編集ページにリンクしようとしているようですが、正しくありません。

次のように :id パラメータを使用して、正しい :edit アクションへのルートにする必要があります。

<%= link_to "Edit user", edit_user_path(user.id) %>
于 2013-07-07T04:07:48.713 に答える