只显示索引操作中属于current_user的任务?

时间:2012-03-26 23:39:13

标签: ruby-on-rails authorization

我使用bcrypt-ruby gem从头开始跟踪RailsCasts身份验证(http://railscasts.com/episodes/250-authentication-from-scratch-revised)并在应用中使用best in place gem来自另一个RailsCasts剧集(http://railscasts.com/episodes/302-in-place-editing)。

我有用户,会话和任务模型。用户登录应用程序后,将用户路由到tasks#index。我希望只显示属于current_usertasks#index的任务,而不是显示所有任务。

我的模型关联看起来像这样: Subscription: has_many :users, Tasks: belongs_to :user, User: has_many :tasks and belongs_to :subscription

用户表包含电子邮件和密码列。任务表有内容列。

从头开始的简单身份验证在application.rb文件中创建了一个帮助器方法,我在任务控制器中访问时遇到了困难:

def current_user @current_user ||= User.find(session[:user_id]) if session[:user_id] end helper_method :current_user

我的任务#controller index action看起来像..

@tasks = Task.order("position")
@task = Task.new

end`

我的任务#index看起来像这样:

`
<% @tasks.each do |task| %>
<li id="task_<%= task.id %>"><%= best_in_place task, :content %>
<%= link_to raw("&times;"), task, method: :delete, remote: true  %>
<span class="handle">&mdash;</span>
</li>
<% end %>`

`  

<%= form_for(Task.new) do |f| %>
<%= f.text_field  :content, :placeholder => "Add a new task here" %>
<% end %>

`

如何将任务仅限制为当前用户创建的任务?

2 个答案:

答案 0 :(得分:2)

由于用户有许多任务,您可以在任务控制器中使用以下内容将任务限制为当前用户,如下所示......

@tasks = @current_user.tasks.order("position")
@task = Task.new(:user => @current_user)

答案 1 :(得分:0)

通过访问在任务模型中创建的方法的另一种方式:

app/views/index.html.erb

def index
     @tasks = current_user_tasks(current_user)
end

app/model/Task.rb

def current_user_tasks(user)
Task.where("tasks.user_id = ?", user.id).order('created_at asc').first
end

希望这将解决你的问题!