client_side_validations gem https://github.com/bcardarella/client_side_validationsを使用して、railscast#263 http://railscasts.com/episodes/263-に示すように、JavaScriptでruby検証を使用できます(jqueryを使用している場合)。クライアント側の検証。
既存のroom_idを検索し、それへのリンクをエラーメッセージに渡して、ビューに返されるカスタムバリデーターを作成できます。次のようになります。
# lib/room_existence_validator.rb
class RoomExistenceValidator < ActiveModel::EachValidator
def validate_each(object, attribute, value)
if existing_room = Room.find_by_id(value)
# unfortunately url_for helper is not defined here so it's hard-wired
room_link = "/rooms/#{existing_room.id}/edit"
object.errors[attribute] << "#{link_to "Click here", room_link} to edit that room"
end
end
end
form_forヘルパー呼び出しに:validates=>trueの部分を追加する必要があります。今では、ajaxified呼び出しなしで動作します。
ajaxで動作させるには、さらに2つのことを行う必要があります。
a)rails.validations.custom.jsファイルを追加します。これは次のようになります。
# rails.validations.custom.js
# please beware the .remote in function-name
ClientSideValidations.validators.remote['existing_room'] = function(element, options) {
if ($.ajax({
url: '/validators/existing_room',
data: { id: element.val() },
// async *must* be false
async: false
}).status == 404) { return options.message; }
}
b)バリデーターに応答するラックミドルウェアを追加するなどして検証リクエストをルーティングします-client_side_validationswikihttps://github.com/bcardarella/client_side_validations/wiki/Custom-Validatorsで説明されているルート
それが役立つことを願っています:D