2013-07-02 56 views
1

如何製作它以便用戶只能編輯/查看屬於他們的物品使用設計?我似乎無法弄清楚。我研究並發現了一些關於在我的清單控制器索引中設置current_user並創建方法以及將關係放入我的用戶模型和清單模型中的方法。我正在創建一個清單,用戶可以創建一個標題和一個名稱,並將項目添加到該清單,以便我也有一個項目模型。我讀了關於康康,但不太確定這是我正在尋找的。我只想在用戶登錄創建清單時能夠擁有該清單,這些清單隻屬於他們,因此當他們註銷時,不會顯示他們創建的任何清單。當他們重新登錄時會顯示創建的清單。我知道這很簡單,但不能指出任務。任何人都可以幫忙我在這個項目上使用rails 4。謝謝!我該如何製作,以便用戶只能編輯/查看屬於他們的物品使用設計?

+1

所有的下CURRENT_USER您的疑問只是範圍。 'current_user.checlists.all',current_users.checklists.find(params [:id])等。 – Doon

回答

1

有權限的兩個主要方面。認證和授權。

設計提供身份驗證,這基本上是「該用戶是這個人。」它通過登錄驗證。

cancan庫有助於提供授權,這是「該用戶被允許做這個動作。」您可以使用康康舞到Define an ability with a block做這樣的事情:

can :read, Item, Item.all do |item| 
    item.owner == current_user 
end 
+0

感謝您的信息,也將檢查到這一點。 – Awhitey98

1

在用戶模式:

# user.rb 

has_many :items #or somehow like this if you have joins or something else 

在控制器:

before_filter :authenticate_user! #inherit devise helpers and methods in controller 

def index 
    @items = current_user.items #for the current !!signed-in!! user 

    # other necessary code... 
end 

def edit 
    @item = current_user.items.find(params[:id]) 

    # other necessary code... show action would include the same row for @item finding 
end 

康康舞寶石是真的,您可以使用太如果你有很多的授權問題不只是你提到的......也有很多教程的周圍,還不是最壞的一種是康康舞文檔中

+0

謝謝!我今天正在做類似的事情,並且遇到了一些錯誤。稍後當我回家時會檢查它。 – Awhitey98

+0

只是發佈錯誤,你有我相信我們會很快找到解決方案 – okliv

+0

嘿Okliv,我在必要的控制器做了上述和更新模型,但不斷收到此錯誤。未定義的方法'覈對清單'爲零:NilClass。似乎無法弄清楚爲什麼。我更新了我的索引控制器,按照您的建議編輯並顯示控制器中的操作,但沒有運氣。 – Awhitey98

1

您必須將user_id外鍵放在您想要 放置此限制的所有模型中。

與編輯和視圖操作做這樣的事情

例如: -

用戶的has_many:帖子

和後belong_to:用戶

def edit 
    @post = current_user.posts.find(params[:id]) 
end 

def update 
    @post = current_user.posts.find(params[:id]) 
    @post.update_attributes(params[:id]) 
    respond_with @post 
end 


def show 
    @post = current_user.posts.find(params[:id]) 
end 
+0

謝謝,我會嘗試以這種方式工作。我知道我在正確的方向,但無法到達那裏。 – Awhitey98

2

你可能想編寫如下的控制器:

class ChecklistsController < ApplicationController 
    before_action :set_checklist, only: [:show, :edit, :update, :destroy] 

    def index 
    @checklists = current_user.checklists 
    end 

    def new 
    @checklist = current_user.checklists.new 
    end 

    def create 
    @checklist = current_user.checklists.create(checklist_params) 
    end 

    def show 
    end 

    def edit 
    end 

    def update 
    @checklist.update_attributes(checklist_params) 
    # ... 
    end 

    def destroy 
    @checklist.destroy 
    # ... 
    end 

    private 

    def load_checklist 
     @checklist = current_user.checklists.find(params[:id]) 
    end 

    def checklist_params 
     params.require(:checklist) # .permit(...) 
    end 
end 
+0

感謝您的信息。我會在稍後檢查。 – Awhitey98

1

我知道這是一個很老的文章,但回答你的問題,你需要做的就是添加過濾器到您的顯示頁面。對於你想要做的事情,這是一個簡單的解決方案。

這裏是你如何顯示您的文章,如果只有創建者可以編輯自己的帖子,它的工作對我來說,快速構建功能。

<tbody> 
 
    <% @posts.each do |post| %> 
 
     <tr> 
 
     <td><%= post.content %></td> 
 
     <td> - <%= post.user.username %> (<%= post.user.first_name %> <%= post.user.last_name %>)</td> 
 
     <% if post.user.id == @user %> 
 
     <td><%= link_to 'Edit', edit_post_path(post) %></td> 
 
     <td><%= link_to 'Delete', post, method: :delete, data: { confirm: 'Are you sure?' } %></td> 
 
     <% end %> 
 
     </tr> 
 
    <% end %> 
 
    </tbody>

在您的控制器,所有你需要做的就是加入這一行。

@user = current_user.id

對不起它的晚,但希望它可以幫助別人的未來!

您可能還需要將以下內容添加到用戶模型中。

accepts_nested_attributes_for :posts

相關問題