Я получаю эту ошибку, когда загружаю страницу, содержащую форму (например, edit.html.erb или new.html.erb). Застывает на этикетках. Я должен подчеркнуть, что я использую не ActiveRecord в качестве ORM в своем приложении, а гем Perpeuity, который является реализацией шаблона Datamapper. Оставить Activerecord позади оказалось немного проблематично, поэтому, возможно, кто-то сможет помочь.
Частичная форма:
<%= form_for(@address) do |f| %>
<% if @address.errors.to_a.any? %>
<div id="error_explanation">
<h2><%= pluralize(@address.errors.count, "error") %> prohibited this address from being saved:</h2>
<ul>
<% @address.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
</div>
<% end %>
<div class="row collapse">
<div class="small-3 columns">
<% require 'debugger'; debugger %>
<%= f.label :line1, class: "right inline" %>
</div>
<div class="small-7 columns left">
<%= f.text_field :line1 %>
</div>
</div>
<div class="row collapse">
<div class="small-3 columns">
<%= f.label :line2, class: "right inline" %>
</div>
<div class="small-7 columns left">
<%= f.text_field :line2, :placeholder => "(optional)" %>
</div>
</div>
<div class="row collapse">
<div class="small-3 columns">
<%= f.label :postcode, class: "right inline" %>
</div>
<div class="small-7 columns left">
<%= f.select :postcode, Address::POSTCODES, :prompt => 'Select a postcode (optional)' %>
</div>
</div>
<div class="row collapse">
<div class="small-3 columns">
<%= f.label :city, class: "right inline" %>
</div>
<div class="small-7 columns left">
<%= f.text_field :city %>
</div>
</div>
<div class="row collapse">
<div class="small-3 columns">
<%= f.label :county, class: "right inline" %>
</div>
<div class="small-7 columns left">
<%= f.select :postcode, Address::COUNTIES, :prompt => 'Select a county (optional)' %>
</div>
</div>
<div class="row collapse">
<div class="small-9 small-offset-3 columns">
<%= f.submit %>
</div>
</div>
Модель:
class Address
extend ActiveModel::Naming
extend ActiveModel::Translation
include Perpetuity::RailsModel
def errors
@errors ||= ActiveModel::Errors.new(self)
end
def read_attribute_for_validation(attr)
send(attr)
end
def save
validate!
errors.empty? ? super : false
end
def validate!
#place custom validations here e.g.
errors.add(:name, "cannot be blank.") if self.name = ""
errors.add(:number,"must be less than 7.") if self.number >= 7
end
attr_accessor :name, :city, :county, :line1, :line2, :postcode
attr_reader :errors
end
Контроллер с соответствующими методами:
class AddressesController < ApplicationController
def new
@address = Address.new
respond_to do |format|
format.html # new.html.erb
format.json { render json: @address }
end
end
def edit
#require 'debugger'; debugger
@address = Perpetuity[Address].find(params[:id])
end
def create
@address = Address.new(params[:address])
Perpetuity[Address].insert @address
respond_to do |format|
if @address.save
format.html { redirect_to @address, notice: 'Address was successfully created.' }
format.json { render json: @address, status: :created, location: @address }
else
format.html { render action: "new" }
format.json { render json: @address.errors, status: :unprocessable_entity }
end
end
end
def update
@address = Perpetuity[Address].find(params[:id])
respond_to do |format|
if @address.update_attributes(params[:address])
format.html { redirect_to @address, notice: 'Address was successfully updated.' }
format.json { head :no_content }
else
format.html { render action: "edit" }
format.json { render json: @address.errors, status: :unprocessable_entity }
end
end
end
end
Я использую Rails 3.2, а установленный гем ActiveModel имеет версию 3.2.13. Я просмотрел код gem и не могу найти в нем метод i18n_key, а эта документация здесь [link]http://www.rubydoc.info/docs/rails/3.1.1/ActiveModel/Name:i18n_key указывает, что он должен быть там (аналогично этому в 3.2.8 документы). Это баг или я что-то не так делаю? Спасибо за вашу помощь.
Perpetuity::RailsModel
. Я даже не знал, что уActiveModel
есть интеграция с i18n. На сайте с документацией по API это не упоминается. Я посмотрю, что я могу сделать с ним. Вы помните, по какой линии звонилi18n_key
? - person jamie_gaskins   schedule 17.08.2014