-1

我正在尝试学习有关 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

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

4

3 回答 3

2

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


一种更简单的方法,因为您正在编写教程(=> 您想学习),您可以使用关联来解决它。

在 app/models/user.rb 里面

has_many :statuses, dependent: :destroy

并从 app/models/status.rb 中删除 attr_accessible :user_id

attr_accessible :attribute 意味着用户可以通过表单显式设置此属性的值,这是您不想要的。

然后检查您的控制器,如果正在为其创建帖子的用户是当前登录用户。如果没有,请不要允许。

于 2012-11-27T01:59:08.470 回答
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 }%>

这将起作用。如果您遇到困难,请告诉我。

于 2012-11-27T02:21:09.463 回答
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 %>

我认为它会起作用

于 2012-11-27T02:01:54.010 回答