私はRailsに非常に慣れていないので、どういうわけか奇妙な問題に直面しています.グーグルはこれまでのところ役に立ちませんでした...
Rails入門ガイドに従って古典的なCRUDリソースを実装しましたが、「更新」部分をブロックしています: http://guides.rubyonrails.org/getting_started.html#updating-articles
これは私のモデル「Devwork」の一部です:
class Devwork < ActiveRecord::Base
validates :short_title, presence: true, uniqueness: true
validates :title_fr, presence: true, allow_blank: false
translates :title, :summary, :description
globalize_accessors
end
ローカライズされたデータを永続化するためにGlobalize gem を使用し、ヘルパーにはGlobalize-accessorを使用しています。
コントローラーの更新アクションは次のとおりです。
class DevworksController < ApplicationController
def update
@devwork = Devwork.find(params[:id])
if @devwork.update(devwork_params)
redirect_to @devwork
else
render :edit
end
end
private
def devwork_params
params.require(:devwork)
.permit!
end
end
フォームの一部:
<%= form_for @devwork do |f| %>
<p>
<%= f.label :short_title %>
<%= f.text_field :short_title %>
</p>
<p>
<%= f.label :title_fr %>
<%= f.text_field :title_fr %>
<%= f.label :title_en %>
<%= f.text_field :title_en %>
</p>
<p>
<%= f.submit %>
</p>
<% end %>
short_title
必須ではありませんが、必須ではないtitle_fr
別のフィールドが存在しますtitle_en
。更新が失敗した場合 (通常は empty が原因で)、更新フォームが再度表示されるようにしますtitle_fr
。
しかし、うまくいきません。が空render :edit
であっても更新が失敗することはありません (入力されません)。title_fr
実際、フィールドの 1 つが空の場合、更新は何もせず、空でないフィールドのみを更新します。
確かにどこかで何かを見逃していましたが、それを理解できません...おそらく Globalize の誤用ですか?
ご協力いただきありがとうございます !