2010-09-13 13 views
0

Je suis nouveau sur Rails mais j'ai beaucoup utilisé PHP au cours des années. Je construis un blog simple (je sais) pour acquérir mes compétences dans le monde MVC/Rails. J'ai les bases qui fonctionnent, mais j'ai passé le week-end à essayer de faire fonctionner Maruku, par exemple un corps de message enregistré dans une zone de texte avec le balisage Markdown Extra sur la base de données, puis de nouveau dans le navigateur.Problèmes d'utilisation de Maruku dans Rails 3

J'ai utilisé le code suivant dans mon modèle post mais je reçois une erreur lorsque je tente de charger/messages - « variable locale non définie ou méthode` Maruku » pour # »

class Post < ActiveRecord::Base 
validates :name, :presence => true 
validates :title, :presence => true, 
       :length => { :minimum => 5 } 
validates :content, :presence => true 
validates :excerpt, :presence => true 

has_many :comments, :dependent => :destroy 

maruku.new(:content).to_html 

end 

J'ai aussi essayé quelque chose de similaire dans mon contrôleur de postes que j'ai trouvé ici. Alors appelé @ post.content à mon avis Afficher mais obtenir une erreur:

body = maruku.new(post.body) 
post.body = body.to_html 

Je suis mort sûr que c'est mon cerveau noob être mort, mais toute aide ou direction serait génial comme je l'ai combattu avec ce depuis deux jours . BTW J'utilise maruku car j'ai besoin de Markdown Extra car mes anciens billets de blog sont tous formatés de cette façon.

Merci

Actualisé - PostsController

class PostsController < ApplicationController 

# GET /posts 
# GET /posts.xml 
def index 
@posts = Post.find(:all, :order => 'created_at DESC') 

respond_to do |format| 
format.html # index.html.erb 
format.xml { render :xml => @posts } 
end 
end 

# GET /posts/1 
# GET /posts/1.xml 
def show 
@post = Post.find(params[:id]) 

respond_to do |format| 
format.html # show.html.erb 
format.xml { render :xml => @post } 
end 
end 

# GET /posts/new 
# GET /posts/new.xml 
def new 
@post = Post.new 

respond_to do |format| 
format.html # new.html.erb 
format.xml { render :xml => @post } 
end 
end 

# GET /posts/1/edit 
def edit 
@post = Post.find(params[:id]) 
end 


# POST /posts 
# POST /posts.xml 
def create 
@post = Post.new(params[:post]) 

respond_to do |format| 
if @post.save 
format.html { redirect_to(@post, :notice => 'Post was successfully created.') } 
format.xml { render :xml => @post, :status => :created, :location => @post } 
else 
format.html { render :action => "new" } 
format.xml { render :xml => @post.errors, :status => :unprocessable_entity } 
end 
end 
end 

# PUT /posts/1 
# PUT /posts/1.xml 
def update 
@post = Post.find(params[:id]) 

respond_to do |format| 
if @post.update_attributes(params[:post]) 
format.html { redirect_to(@post, :notice => 'Post was successfully updated.') } 
format.xml { head :ok } 
else 
format.html { render :action => "edit" } 
format.xml { render :xml => @post.errors, :status => :unprocessable_entity } 
end 
end 
end 

# DELETE /posts/1 
# DELETE /posts/1.xml 
def destroy 
@post = Post.find(params[:id]) 
@post.destroy 

respond_to do |format| 
format.html { redirect_to(posts_url) } 
format.xml { head :ok } 
end 
end 
end 

Répondre

1

Vous devez utiliser (notez le cas):

Maruku.new(...) 

Constantes en rubis commencent dans une lettre majuscule et les variables commencent dans un lettre minuscule (vous accédez à une classe, qui est une constante).

Assurez-vous également d'inclure la gemme dans votre Gemfile (Rails 3 requiert que toutes les bibliothèques soient spécifiées dans ce fichier). Enfin, vous ne pouvez pas utiliser Maruku comme vous l'avez indiqué. Au lieu de cela, essayez:

class Post < ActiveRecord::Base 

    ... 

    def content_html 
     Maruku.new(self.content).to_html  
    end 

end 

Alors à votre avis, vous pouvez accéder à partir <% = @ post.content_html%>. Notez que vous devriez probablement effectuer une conversion au format HTML en utilisant un rappel (voir Active Record Callbacks) pour améliorer les performances à un moment donné, mais cela devrait vous permettre de démarrer.

+0

Merci vraiment d'apprécier l'aide - n'était pas au courant de cela. J'ai fait les changements, mais maintenant obtenir une erreur "NoMethodError dans PostsController # index" avec la ligne suivante disant "méthode privée' gsub 'appelé pour: contenu: Symbole " – rollbahn

+0

@rollbahn Mettre à jour votre code exemple. –

+0

Vous ne savez pas comment mettre à jour le code dans un commentaire car il ne semble pas analyser correctement? class Post true valide: title,: presence => true, : length => {: minimum => 5} valide: contenu,: présence => true valident: extrait,: présence => true has_many: commentaires,: dependent =>: détruire Maruku.new (: contenu) .to_html fin – rollbahn