我使用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_user
中tasks#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("×"), task, method: :delete, remote: true %>
<span class="handle">—</span>
</li>
<% end %>`
`
<%= form_for(Task.new) do |f| %>
<%= f.text_field :content, :placeholder => "Add a new task here" %>
<% end %>
`
如何将任务仅限制为当前用户创建的任务?
答案 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
希望这将解决你的问题!