0

我有一个网络应用程序,用户可以通过 Devise 注册并发布图片供其他人投票。

我正在尝试将用户用户名附加到他们上传的照片上,但我无法终生弄清楚如何。

我想出了如何通过隐藏字段将 Devise user_id 输入表单,但用户名只是在数据库中显示为空白字段(不是NULL,只是空白)。

如何从 Devise 获取用户名而不是 user_id 来发布?

我有所有合适的belongs_tohas_many模型。

表格。

<% if current_user %>
    <%= simple_form_for Picture.new, :remote => true, :html => { :class => "form-horizontal" } do |f| %>
    <%= f.input :title %>
    <%= f.input :image, :as => :image_preview, :label => false, :input_html => {:preview_version => :thumb} %>
      <div class="control-group"> 
        <div class="controls">
          <a href="#" class="btn" id="file">Choose a File</a>
        </div>
      </div>
      <%= f.input :desc, :as => :text, :input_html => { :cols => 20, :rows => 3 }, :label => 'Description' %>
      <%= f.hidden_field :user_id %>
      <%= f.hidden_field :username %>
      <div class="control-group">
        <div class="controls">
          <div class="btn-group">
            <%= f.submit "Add Picture", :class => 'btn btn-primary' %>
            <button class="btn btn-danger" id="form-cancel">Cancel</button>
        </div>
      </div>
    <% end %>

图片控制器.rb

def create  
  #This line inserts the user_id into the database
  @picture = current_user.pictures.create!(params[:picture])  
  @picture.save  
    respond_to do |format|  
      format.html { redirect_to pictures_url, notice: 'Thanks for your picture!' }  
      format.js  
    end  
end   
4

1 回答 1

2

您不需要隐藏字段。使用隐藏字段还会增加安全风险,用户可以上传图片并使其看起来像是由另一个用户上传的。要将当前用户的 id 和用户名添加到图片中,您需要做的就是修改您的控制器,如下所示:

@picture = Picture.new(params[:picture])
@picture.user_id = current_user.id
@picture.username = current_user.username # assuming the user model has a username field
@picture.save

尽管更好的方法是将用户的 id 与图片一起存储,并确保图片模型具有belongs_to :user并且用户模型具有has_many :pictures,而不是将用户名与图片一起存储。当您想获取用户名时使用此方法,您可以通过以下方式访问它picture.user.username

于 2012-11-01T14:49:01.617 回答