我有一个网络应用程序,用户可以通过Devise注册,并发布图片供其他人投票。
我正在尝试将用户的用户名附加到他们上传的照片上,但我不能为我的生活找出方法。
我想出了如何通过隐藏字段将Devise user_id放入表单中,但用户名只是在数据库中显示为空白字段(不是NULL
,只是空白)。
如何从Devise获取用户名而不是user_id?
我在模型中拥有所有相应的belongs_to
和has_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 %>
pictures_controller.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
答案 0 :(得分: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