2015-08-29 163 views
-2

我已經使用devise gem進行身份驗證。在同一個項目中我使用了相冊模型。但我的new_user_album_path是給錯誤。我認爲有用戶ID問題。請幫助我。路徑導軌無法正常工作

這是index.html.erb文件

<%= link_to 'New Article', new_user_album_path() %> 
<table> 
<tr> 
<th>Title</th> 
<th>Description</th> 
</tr> 

    <% @albums.each do |album| %> 
    <tr> 
    <td><%= album.title %></td> 
    <td><%= album.description %></td> 
    <td><%= link_to 'Show', user_album_path(album.user,album) %></td> 
<td><%= link_to 'Edit', edit_user_album_path(album.user,album) %></td> 
    <td><%= link_to 'destroy', user_album_path(album.user,album), 
    method: :delete, 
    data: { confirm: 'Are you sure?' } %></td> 
    </tr> 

    <% end %> 
    </table> 



    this is albums_controller file 

    class AlbumsController < ApplicationController 
    before_action :authenticate_user! 

    def index 
    @albums = current_user.albums.all 

     end 

     def show 
     @album = current_user.albums.find(params[:id]) 
     end 

    def new 
    @album = current_user.albums.new 
    end 

    def edit 
    @album = current_user.albums.find(params[:id]) 
    end 

    def create 

    @album = current_user.albums.build(album_params) 
    if @album.save 
    redirect_to action: 'index' 
    else 
     render 'new' 
    end 
    end 

    def update 
    @album = current_user.albums.find(params[:id]) 

     if @album.update(album_params) 
     redirect_to action: 'show' 
     else 
     render 'edit' 
     end 
    end 

    def destroy 
     @album = current_user.albums.find(params[:id]) 
     @album.destroy 
    redirect_to action: 'index' 
    end 
    private 
    def album_params 
     params.require(:album).permit(:title, :description, :user_id) 
    end 

    end 

    it is giving following errror.-> 


     NoMethodError in Albums#index 



    undefined method `users' for nil:NilClass 

    Extracted source (around line #2): 

     <h1>Your Albums</h1> 
    <%= link_to 'New Article', new_user_album_path(@album.users.id) %> 
     <table> 
     <tr> 
      <th>Title</th> 
     <th>Description</th> 

route.rb file 

    devise_for :users 
    # The priority is based upon order of creation: first created priority. 
# See how all your routes lay out with "rake routes". 

    # You can have the root of your site routed with "root" 
    resources :users do 
    resources :albums 
    end 

    root 'albums#index' 
+0

route.rb中有什麼? – trh

回答

1

路由信息時,正確設置,那麼下面的應該是這個問題:

new_user_album_path() 

請求路徑嵌套資源,並且需要得到父母對象,這是你的用戶:

new_user_album_path(user_id: current_user.id) 

我認爲即使這個工程:

new_user_album_path(current_user) 

如果這不起作用, 您應檢查線路都像你認爲他們是從外殼調用

rake routes 

尋找在輸出new_user_album_path

  • 它真的在那裏嗎?
  • 所有名稱部分的單數和複數是否相同?
  • 它需要什麼參數?
+0

(user_id:current_user.id) –

+0

這對我有效 –

+0

new.html.erb文件中存在另一個錯誤 –

0

其他的東西,可能是不正確的,但在你albums#index你定義的變量@albums,但你在你的鏈接,你使用@album

更新

<%= link_to("New Article, new_user_album_path(@album.users.id)

<%= link_to("New Article, new_user_album_path(@albums.users.id)

接收不同的錯誤。關於你的目標的更多解釋會有所幫助。 :)

0

請更改爲:

<%= link_to 'New Article', new_user_album_path(current_user) %> 
+0

未定義的方法'用戶'爲#

+0

它給出了上述錯誤 –

+0

是的,@albums是一個「關係」或專輯列表。該列表沒有用戶屬性,只有奇異相冊 – Meier