2016-08-21 33 views
0

我正在寫一個markdown博客,我想用front matter來定義元數據,比如帖子標題。此前端事件是markdown字段的一部分,並在控制器的創建操作中進行分析。 我面臨的問題是我的控制器拒絕保存修改後的屬性。我試圖用before_actions把這個變成一個模型方法,但沒有奏效。我也read this question並嘗試在我的模型attribute_will_change!方法沒有成功。 我出來的想法,所以任何幫助將不勝感激。Rails沒有保存修改後的屬性

  • 出於某種原因,public屬性保存爲預期,但其餘的不是。
  • 確信調頻變量包含值(完美的作品)
  • 試過這種移動到模型before_save行動
  • 我也試圖消除||=和定期=分配替換它們。

柱控制器創建

def create 
    @post = Post.new(post_params) 
    @post.public = true 
    @post.user = User.first 
    @post.word_count = @post.markdown.scan(/[\w-]+/).size 
    fm, content = YAML::FrontMatter.extract(@post.markdown) 

    @post.title_will_change! 
    @post.title ||= fm[:title].to_s 
    @post.subtitle ||= fm[:subtitle] 
    @post.abstract ||= fm[:abstract] 
    @post.video_token ||= fm[:video_token] 
    @post.slug ||= fm[:slug] 
    @post.seo_keywords = fm[:seo_keywords] 

    if @post.image 
     @post.image_id = fm[:image] 
    end 

    cat = Category.find_by_name(fm[:category]) 
    if cat.present? 
     @post.category = cat 
    else 
     @post.category = Category.create(name: fm[:category]) 
    end 

    new_markdown = @post.markdown.gsub(/(---\n(?:.*: '.*'\n)*---)/, '') 
    @post.markdown = new_markdown 
    respond_to do |format| 
     if @post.save 
      format.html { redirect_to @post, notice: 'Post was successfully created.' } 
      format.json { render :show, status: :created, locataion: @post } 
     else 
      format.html { render :new } 
      format.json { render json: @post.errors, status: :unprocessable_entity } 
     end 
    end 
end 

回答

0

我訪問fm變量和符號,而不是一個字符串...這是問題。很煩人。