【发布时间】:2019-11-29 16:02:41
【问题描述】:
我想捕获并显示附加到对象的 ActiveRecord 资源的验证错误(此处::album_artwork)。
我正在遵循 Amit Suroliya 关于在表单中显示错误的建议(f.object.errors ...,发现 here)。关注guides.rubyonrails.com guide () 会导致表单首次加载时出现错误(在用户提交之前)。
代码:
# album.rb
has_one_attached :album_artwork
validates :name, presence: { message: 'Album should have a title.' }
validates :release_date, presence: { message: 'Album should have a release date.' }
validates :album_artwork, presence: { message: 'Album should have an artwork.' } # not working :(
#albums_controller.rb
def new
@album = Album.new
@album.tracks.build # Album has_many Tracks (doesn't matter here)
end
def create
@album = Album.new(album_params)
respond_to do |format|
if @album.save
format.html { redirect_to @album, flash: { success: "Album added" } }
format.json { }
else
format.html { render 'albums/new', flash: { error: "Something wrong happened :(" } }
format.json { }
end
end
end
# albums/new.html.erb
<%= form_for @album, url: {action: 'create'} do |f| %>
<% if f.object.errors.any? %>
<div class="alert alert-danger">
<h4>Errors :</h4>
<ul>
<% f.object.errors.full_messages.each do |message| %>
<li><%= message %></li>
<% end %>
</ul>
</div>
<% end %>
<%= render 'albums/form_new', f: f %>
<% end %>
有 3 点我无法找出最佳(或任何)解决方案:
- 如何验证 :album_artwork 对应的 file_field ?
- 当验证失败时,URL 指向 /albums 而不是 /albums/new(但是,/albums/new 会显示,但如果我刷新,我将被重定向到 /albums)
- 是否有任何方便的方法可以使显示错误的代码干燥? (辅助渲染部分?)
我们将不胜感激地接受任何帮助、建议或批评!
祝你有美好的一天
【问题讨论】:
标签: ruby-on-rails ruby model-view-controller activerecord