2

我对 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不是的字段。title_fr如果更新失败(通常是因为 empty ),我希望再次显示更新表单。

但它不起作用。render :edit即使title_fr为空,更新也永远不会失败(永远不会进入)。实际上,如果其中一个字段为空,则更新不会执行任何操作,它只会更新非空字段。

我肯定在某个地方漏掉了一些东西,但我想不通……也许是对 Globalize 的误用?

谢谢你的帮助 !

4

0 回答 0