我刚开始使用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这样的东西有帮助吗?
答案 0 :(得分:1)
感谢@ argentum47的评论中的答案。
def create
@reminder = Reminder.new(reminder_params)
需要:
def create
@reminder = current_user.reminders.new(reminder_params)