Ceci est la suite de Confused as to which Prototype helper to use. Mon code a été mis à jour pour tenir compte des suggestions d'autres utilisateurs:Confus quant à l'aide de Prototype à utiliser (mise à jour)
(modèle) message.rb:
class Message < ActiveRecord::Base
after_create :destroy_old_messages
def old_messages
messages = Message.all(:order => 'updated_at DESC')
if messages.size >= 24
return messages[24..-1]
else
return []
end
end
protected # works without protected
def destroy_old_messages
messages = Message.all(:order => 'updated_at DESC')
messages[24..-1].each {|p| p.destroy } if messages.size >= 24
end
end
(vue) index.html.erb:
<div id="messages">
<%= render :partial => @messages %>
</div>
<%= render :partial => "message_form" %>
(vue) _message. html.erb:
<% div_for message do %>
<%= h message.created_at.strftime("%X") %> - <%= h message.author %><%= h message.message %>
<% end %>
(vue) _message_form.html.erb:
<% remote_form_for :message, :url => { :action => "create" }, :html => { :id => 'message_form'} do |f| %>
<%= f.text_area :message, :size => "44x3" %><br />
<%= submit_to_remote 'submit_btn', 'submit', :url => { :action => 'create' } %><br />
<% end %>
(voir) create.rjs:
page.insert_html :top, :messages, :partial => @message
page[@message].visual_effect :grow
page[:message_form].reset
flash[:notice]
flash.discard
# @old_messages.each do |m|
# page.remove(m.id)
# end
(contrôleur) messages_controller.rb: Méthode
class MessagesController < ApplicationController
def index
@messages = Message.all(:order => "created_at DESC")
respond_to do |format|
format.html
format.js
end
end
def new
@message = Message.new
respond_to do |format|
format.html
end
end
def create
@message = Message.new(params[:message])
# @old_messages = Message.old_messages
respond_to do |format|
if @message.save
flash[:notice] = 'message created.'
format.html { redirect_to(messages_url) }
format.js
else
format.html { render :action => "new" }
end
end
end
def update
@message = Message.find(params[:id])
respond_to do |format|
if @message.update_attributes(params[:message])
flash[:notice] = 'message updated.'
format.html { redirect_to(messages_url) }
format.js
else
format.html { render :action => "edit" }
end
end
end
def destroy
@message = Message.find(params[:id])
@message.destroy
respond_to do |format|
format.html { redirect_to(messages_url) }
format.js
end
end
end
A l'exception de la old_messages de dans le modèle, la totalité du code commenté étaient modifications recommandées à partir du previous post pour faire ce travail. Mais dès que je décommente les trois dernières lignes de create.rjs et @old_messages = Message.old_messages du contrôleur, je ne peux même pas soumettre de messages avec le message_form partial. Quelqu'un peut-il voir ce qui ne va pas ici? J'essaie juste de créer une application basique pour aider à mieux comprendre les rails et les rjs. J'apprécierais grandement toutes les suggestions ou corrections que vous avez à partager, merci d'avoir lu mon article.
pourriez-vous s'il vous plaît nous dire quelle erreur obtenez-vous? –
Paramètres: {"authenticity_token" => "srg8coKfA7j/Boy1zMPMs9BTonQ4 + 5sPlGpfo/McKzI =", "message" => {"message" => "veuillez travailler!"}, "Submit_btn" => "submit"} SQL (0.3ms) SELECT nom dE sqlite_master WHERE type = 'table' AND NOT name = 'sqlite_sequence' NoMethodError (méthode non définie old_messages' pour #): app/controllers/messages_controller.rb: 18 : dans 'créer ' C'est avec le code ci-dessus décommenté. –
BasicObject