Rails:使用设计,因此用户只能看到他们的内容

时间:2014-12-06 21:11:50

标签: ruby-on-rails devise

我刚开始使用rails并通过构建一个简单的“提醒”应用程序来练习。

我现在正在使用Devise添加用户身份验证。用户登录后,会将其重定向到应用程序的索引页面。此时,我希望用户只能看到他们创建的提醒。

reminders_controller.rb

  def index
    @reminders = current_user.reminders
    @reminder = current_user.reminders.new #Show create form on index
  end
 def new
    @reminder = current_user.reminders.new
  end

 def create
 @reminder = Reminder.new(reminder_params)

 respond_to do |format|
      if @reminder.save
        format.html { redirect_to @reminder, notice: 'Reminder was successfully created.' }
        format.json { render action: 'show', status: :created, location: @reminder }
      else
        format.html { render action: 'new' }
        format.json { render json: @reminder.errors, status: :unprocessable_entity }
      end
   end
 end

此时,代码运行并显示没有错误,但是,它不会在索引页面上显示任何提醒。当我创建新提醒时,它会成功创建提醒,但是,它不会在索引页面上显示提醒。

以下是我的模特:

模型/ user.rb

 class User < ActiveRecord::Base
   has_many :reminders
 end

模型/ reminders.rb

class Reminder < ActiveRecord::Base
    belongs_to :user
end

Schema.rb

  create_table "reminders", force: true do |t|
    t.string   "medication"
    t.time     "time"
    t.datetime "created_at"
    t.datetime "updated_at"
    t.integer  "user_id"
  end

index.html.rb

<h1>Current Reminders</h1>
<table>
  <thead>
    <tr>
      <th>Medication</th>
      <th>Time</th>
      <th></th>
      <th></th>
      <th></th>
    </tr>
  </thead>

  <tbody>
    <% @reminders.each do |reminder| %>
      <tr>
        <td><%= reminder.medication %></td>
        <td><%= reminder.time %></td>
        <td>
          <%= link_to 'Remove', reminder, method: :delete, data: { confirm: 'Are you sure?' } %>
      </td>
      </tr>
    <% end %>
  </tbody>
</table>

<h1>Create New Reminder</h1>
<%= render 'form' %>

我需要做什么才能让用户只能在索引页面上查看他们的提醒?我想我正朝着正确的方向前进,只是无法把它钉死。像CanCan这样的东西有帮助吗?

1 个答案:

答案 0 :(得分:1)

感谢@ argentum47的评论中的答案。

def create
 @reminder = Reminder.new(reminder_params)

需要:

def create
 @reminder = current_user.reminders.new(reminder_params)