У меня есть контроллер записей, который позволяет пользователям добавлять контактную информацию на веб-сайт. Представленная пользователем информация не отображается пользователям до тех пор, пока администратор не проверит флажок и не отправит форму. Таким образом, в основном моя проблема заключается в том, что если я поставлю флажок в качестве администратора, а сначала создаю запись (записи # новый), запись будет общедоступной, как ожидалось, но если пользователь, не являющийся администратором, создает запись (обычный пользовательский вид doesn 't включить' живой 'флажок, только администратор делает), то эта запись застряла в limbo, потому что записи # редактировать вид по какой-то причине не обновляют значение логического флажка при входе в систему как администратор.Рубин на Rails флажок не обновляется при отправке формы
записи # новый вид:
<% form_for(@entry) do |f| %>
<%= f.error_messages %>
Name<br />
<%= f.text_field :name %>
Mailing Address<br />
<%= f.text_field :address %>
#...
<%- if current_user -%>
<%= f.label :live %><br />
<%= f.check_box :live %>
<%- end -%>
<%= f.submit 'Create' %>
<% end %>
записи # редактировать (доступен только администратором) Вид:
<% form_for(@entry) do |f| %>
<%= f.error_messages %>
<%= f.label :name %><br />
<%= f.text_field :name %>
Mailing Address<br />
<%= f.text_field :address %>
<%= f.label :live %><br />
<%= f.check_box :live %>
<%= f.submit 'Update' %>
<% end %>
EDIT:
entries_controller.rb метод обновления:
def update
@entry = Entry.find(params[:id])
respond_to do |format|
if @entry.update_attributes(params[:entry])
flash[:notice] = 'Entry was updated.'
format.html { redirect_to(@entry) }
else
format.html { render :action => "edit" }
end
end
end
entry.rb:
class Entry < ActiveRecord::Base
acts_as_mappable
acts_as_taggable_on :tags
validates_presence_of :name, :tag_list
validates_length_of :name, :maximum => 64
validates_length_of :tag_list, :maximum => 128, :allow_blank => false
validates_length_of :paddress, :maximum => 128, :allow_blank => true
validates_length_of :address, :maximum => 128, :allow_blank => true
validates_length_of :tollfreephone, :in => 7..32, :allow_blank => true
validates_length_of :phone, :in => 7..32, :allow_blank => true
validates_length_of :phone2, :in => 7..32, :allow_blank => true
validates_length_of :mobile, :in => 7..32, :allow_blank => true
validates_length_of :fax, :in => 7..32, :allow_blank => true
validates_length_of :email, :in => 7..48, :allow_blank => true
validates_format_of :email,
:with => /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\Z/i,
:on => :create, :allow_blank => true
validates_length_of :website, :maximum => 64, :allow_blank => true
validates_length_of :description, :maximum => 1024, :allow_blank => true
attr_accessible :name, :tag_list, :paddress, :address, :tollfreephone,
:phone, :phone2, :mobile, :fax, :email, :website,
:description
validate :required_info
before_save :geocode_paddress
searchable_on :name, :address, :phone, :phone2, :mobile, :fax, :email,
:website, :category, :description
private
def required_info
if(phone.empty? and phone2.empty? and tollfreephone.empty? and
mobile.empty? and fax.empty? and email.empty? and
website.empty?
)
errors.add_to_base "Please have at least one form of contact information."
end
end
def geocode_paddress
# if paddress is nil or empty set the old values to nil and return
((self.lat = self.lng = nil); return true) if paddress.empty?
g=Geokit::Geocoders::MultiGeocoder.geocode(paddress)
(errors.add(:paddress,"Could not Geocode address");
return false) unless g.success
self.lat, self.lng = g.lat, g.lng
end
end
Любые идеи относительно того, почему администратор не может обновить флажок: live из окна редактирования?
Буду признателен за любые предложения. Я новичок в рельсах. Я могу отправить больше кода, если это необходимо. Спасибо, что прочитал мой вопрос.
, пожалуйста, напишите свой способ ввода_controller.rb и элемент entry.rb. – Salil
спасибо, что посмотрели. – BasicObject