2010-09-13 4 views
0

Я новичок в Rails, но на протяжении многих лет использовал PHP. Я создаю простой блог (я знаю), чтобы получить свои навыки в мире MVC/Rails.Проблемы с использованием Maruku in Rails 3

У меня есть основы работы, но мы провели выходные, пытаясь заставить Маруку работать, например, тело сообщения, сохраненное из текстовой области с надписью Markdown Extra, в db, а затем обратно в браузер.

Я использовал следующий код в моем сообщении модели, но я получаю сообщение об ошибке при попытке загрузки/сообщений - «неопределенных локальных переменной или метод` maruku»для #»

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 

я пытался что-то подобное в моем контроллере сообщений, который я нашел здесь. Тогда называется @ post.content в моем шоу зрения, но получаю сообщение об ошибке:

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

я мертв уверен, что это мой нуб мозг мертв, но любая помощь или направление было бы здорово, как я уже боролся с этим в течение двух дней , BTW Я использую maruku, поскольку мне нужен Markdown Extra, так как мои старые сообщения в блоге отформатированы таким образом.

Благодаря

ОБНОВЛЕНО - 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 

ответ

1

Вы должны использовать (обратите внимание на регистр):

Maruku.new(...) 

Константы в рубин начинаются в заглавной буквы и переменные начинаются в строчная буква (вы получаете доступ к классу, который является константой).

Кроме того, убедитесь, что вы включили драгоценный камень в свой Gemfile (Rails 3 требует, чтобы все библиотеки были указаны в этом файле).

Наконец, вы не можете использовать Maruku, как вы указали. Вместо этого попробуйте:

class Post < ActiveRecord::Base 

    ... 

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

end 

Тогда, по вашему мнению, вы можете получить доступ через <% = @ post.content_html%>. Обратите внимание, что вы, вероятно, должны сделать преобразование в HTML с помощью обратного вызова (см. Active Record Callbacks) для повышения производительности в какой-то момент, но это должно заставить вас работать и работать.

+0

Спасибо, что очень благодарен за помощь - не знал об этом. Я внес изменения, но теперь получаю сообщение об ошибке «NoMethodError in PostsController # index» со следующей строкой, в которой говорится, что «частный метод« gsub »вызван для: content: Symbol« – rollbahn

+0

@rollbahn. Обновите свой пример кода. –

+0

Не знаете, как обновить код в комментарии, поскольку он, похоже, не разбирается правильно? class Post true validates: title,: presence => true, : length => {: minimum => 5} validates: content,: presence => true подтверждает: выдержка,: присутствие => истинные has_many: комментарии,: зависимые =>: уничтожить Maruku.new (: содержание) .to_html конца – rollbahn