J'ai un contrôleur d'entrées qui permet aux utilisateurs d'ajouter des informations de contact sur le site Web. Les informations soumises par l'utilisateur ne sont pas visibles pour les utilisateurs jusqu'à ce que l'administrateur coche une case à cocher et soumette le formulaire. Donc, mon problème est que si je coche la case en tant qu'administrateur lors de la création initiale d'une entrée (entrées # new), l'entrée sera visible publiquement comme prévu, mais si un utilisateur non-admin crée une entrée n'incluez pas la case à cocher 'live', seul l'administrateur le fait) alors cette entrée est bloquée dans les limbes car les entrées # edit view pour une raison quelconque ne met pas à jour la valeur booléenne case à cocher en tant qu'administrateur.Ruby on Rails case à cocher ne pas mettre à jour sur la soumission de formulaire
entrées # Vue:
<% 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 %>
entrées # modifier (accessible uniquement par admin) Vue:
<% 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:
méthode de mise à jour 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
Des idées expliquant pourquoi un administrateur ne peut pas mettre à jour la case à cocher: live depuis la vue d'édition?
J'apprécierais grandement vos suggestions. Je suis nouveau sur les rails. Je peux poster plus de code si c'est nécessaire. Merci d'avoir lu ma question.
veuillez poster votre méthode de mise à jour entries_controller.rb & entry.rb. – Salil
merci d'avoir jeté un oeil. – BasicObject