2014-03-01 4 views
0

Недавно я добавил поле «тег» в моем блоге приложения, построенного в Rails 4. Ниже вы можете увидеть поле появляется в окне редактирования:Rails 4 - колонка существует, но не обновляет

rendered form

Но как только я вернусь в шоу зрения после редактирования, это не появляется:

Post view

Когда я проверяю базу данных напрямую, я могу определенно видеть, что существует:

sqlite> PRAGMA table_info(POSTS); 
0|id|INTEGER|1||1 
1|title|varchar(255)|0||0 
2|body|text|0||0 
3|created_at|datetime|0||0 
4|updated_at|datetime|0||0 
5|slug|varchar(255)|0||0 
6|tag|varchar(255)|0||0 

Может ли кто-нибудь предложить, что происходит или как это можно устранить?

+1

У вас есть сервер журналов с указанием каких-либо ошибок? Это поможет отладить. Возможно, это проблема с забыванием включить «теги» в ваши разрешенные параметры (если вы используете сильные параметры) – benjaminjosephw

+0

Я понятия не имел, что вы сказали, но когда я проверил контроллер для своих сообщений, я обнаружил, что 'post_prams' сделал не включать ': tag'. Вытащил его и вот он. Спасибо, сэр! Как я могу ответить на ваш ответ? – Tamachan87

+1

Я отправил ответ с большим количеством объяснений. – benjaminjosephw

ответ

2

Rails 4 по умолчанию использует strong parameters. Это означает, что вам нужно явно присваивать белые параметры, которые вы хотите назначить массе.

При добавлении нового атрибута в модель вы должны помнить о необходимости обновления разрешенных параметров в контроллере.

Например, в вашем случае, вам нужно будет убедиться, что :tags добавляются так:

class PostController < ActionController::Base  

    def update 
    post = Post.find(params[:id]) 
    post.update(post_params) 
    redirect_to post 
    end 

    private 

    def post_params 
    params.require(:post).permit(:title, :body, :tag) 
    end 

end 
+0

Спасибо, это идеальное объяснение. – Tamachan87

Смежные вопросы