Ruby on Rails Twitter应用程序 - 创建新状态时关联当前用户ID

时间:2012-11-27 01:55:06

标签: ruby-on-rails twitter-bootstrap rails-activerecord

我正在尝试继续关于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

希望任何人都可以提供帮助!!

3 个答案:

答案 0 :(得分:2)

你可以在这里使用一些授权!


一种更简单的方法,因为您正在编写教程(=&gt;您想要学习),您可以使用关联来解决这个问题。

内部app / models / user.rb

has_many :statuses, dependent: :destroy

从app / models / status.rb

中删除attr_accessible:user_id

attr_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 %>

我认为它会起作用