我正在尝试继续关于Ruby on Rails Twitter应用程序的教程,但是当我到达终点时,我注意到我并不喜欢你可以创建其他用户帖子的事实。我的愿望只是创造你自己的。
我怎样才能实现这个目标
Status Controller Create:
def create
@status = Status.new(params[:status])
respond_to do |format|
if @status.save
format.html { redirect_to @status, notice: 'Status was successfully created.' }
format.json { render json: @status, status: :created, location: @status }
else
format.html { render action: "new" }
format.json { render json: @status.errors, status: :unprocessable_entity }
end
end
end
状态创建当前视图:
...
<div class="field">
<%= f.input :user_id, collection: User.all, label_method: :full_name %>
<%= f.input :content %>
</div>
<div class="form-actions">
<%= f.submit %>
</div>
状态模型:
class Status < ActiveRecord::Base
attr_accessible :content, :user_id
belongs_to :user
end
希望任何人都可以提供帮助!!
答案 0 :(得分:2)
你可以在这里使用一些授权!
使用康康授权,瑞安贝茨的宝石
http://railscasts.com/episodes/192-authorization-with-cancan?autoplay=true
从头开始授权pt.1,pt.2
http://railscasts.com/episodes/385-authorization-from-scratch-part-1?autoplay=true
http://railscasts.com/episodes/386-authorization-from-scratch-part-2?view=asciicast
一种更简单的方法,因为您正在编写教程(=&gt;您想要学习),您可以使用关联来解决这个问题。
内部app / models / user.rb
has_many :statuses, dependent: :destroy
从app / models / status.rb
中删除attr_accessible:user_idattr_accessible:attribute表示用户可以通过您不想要的表单显式设置此属性的值。
然后检查控制器,如果正在为其创建帖子的用户是当前已登录的用户。如果没有,请不要允许。
答案 1 :(得分:1)
在应用程序控制器中:
def current_user
User.find(session[:user_id]) if session[:uid]
end
在验证用户身份时,您必须设置会话user_id。
在您的视图中(使用SimpleForm):
<%= f.input :user_id, as: :hidden, input_html: { value: current_user.id }%>
这会奏效。如果你遇到困难,请告诉我。
答案 2 :(得分:0)
如果你改变了这个
<%= f.input :user_id, collection: User.all, label_method: :full_name %>
到
(some place in you view - or in the controller)
<% <your object>.user_id = <current user id> %>
...
<%= f.hidden_field :user_id %>
我认为它会起作用