Я пишу блог по уценке, и я хочу использовать передний элемент для определения метаданных, таких как заголовки сообщений. Этот фронт-элемент является частью поля уценки и анализируется в действии создания контроллера. Проблема, с которой я сталкиваюсь, заключается в том, что мой контроллер отказывается сохранять измененные атрибуты. Я попытался переместить это в модельный метод с before_actions, который не сработал. У меня также read this question и пробовал метод attribute_will_change!
в моей модели без успеха. У меня нет идей, поэтому любая помощь будет оценена.Рельсы, не сохраняющие измененные атрибуты
- По какой-то причине,
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