【发布时间】:2016-05-21 02:05:47
【问题描述】:
我有一个包含四个输入字段的表单,用户在其中创建一个item。在表单中,四个输入字段之一是用于在表单提交时同时创建user_item 的图片。我遇到了几个问题。
当
item上的验证失败时,我有控制器render :new,但是当这种情况发生时,图片输入字段不可见。验证图片是否存在无效。
我需要一种方法在创建时将
user_item上的user_id属性设置为current_user。
item.rb
validates :name, presence: true, uniqueness: true
validates :description, presence: true
has_many :tags
has_many :user_items
has_many :users, -> { uniq }, through: :user_items
belongs_to :user
accepts_nested_attributes_for :user_items
validates_associated :user_items
user_item.rb
belongs_to :user
belongs_to :item
mount_uploader :picture, PictureUploader
validates_presence_of :picture
validate :picture_size
items_controller.rb
def new
@item = Item.new
@item.user_items.build
end
def create
@item = item.new item_params
if @item.save
redirect_to items_path, notice: "Thank you for your item request!"
else
render :new
end
end
private
def item_params
params.require(:item).permit(:name, :description, :tag_list, user_items_attributes: [:picture]).merge(created_by: current_user.id)
end
new.html.erb
<%= simple_form_for @item, html: { class: "create-item-form" } do |item_builder| %>
<div class="well">
<%= item_builder.input :name, required: false, error: false, label: "Item name" %>
<%= item_builder.input :description, as: :text, required: false, error: false, label: "Description of item" %>
<%= item_builder.input :tag_list, required: false, label: "Tags (these will help users find your item)" %>
<%= item_builder.simple_fields_for :user_items do |user_item_builder| %>
<%= user_item_builder.input :picture, as: :file, required: false, label: "Picture of you with this item" %>
<% end %>
</div>
<div class="clearfix">
<%= item_builder.submit 'Submit new item request', class: "btn btn-primary pull-right inherit-width" %>
</div>
<% end %>
【问题讨论】:
标签: ruby-on-rails forms validation