2013-07-31 2 views
8

я собираюсь через несколько Rails 3 и 4 учебника и попадался то, что я хотел бы некоторое представление о:Rails контроллер создает разницу действий между Model.new и Model.create

В чем разница между моделью .new и Model.create в отношении действия Create. Я думал, что вы используете метод create в контроллере для сохранения, например. @post = Post.create(params[:post]), но похоже, что я ошибаюсь. Любое понимание очень ценится.

Создать действие с помощью Post.new

def new 
    @post = Post.new 
end 

def create 
    @post = Post.new(post_params) 
    @post.save 

    redirect_to post_path(@post) 
end 

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

Создать действие с помощью Post.create

def new 
    @post = Post.new 
end 

def create 
    @post = Post.create(post_params) 
    @post.save 

    redirect_to post_path(@post) 
end 

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

У меня есть два вопроса

  • Является ли это сделать с 4 смены Rails?
  • Неплохая практика использования @post = Post.create(post_params)?
+0

возможно дубликат [Рельсы новый против создания] (http://stackoverflow.com/questions/2472393/rails-new-vs-create) – Amadan

+1

Спасибо за ссылку Amadan. Является ли Rails REST реализацией 'GET' и' POST' такими же, как действия контроллера 'new' и' create'? Я пытаюсь уточнить действия REST vs controller и методы контроллера. –

+0

Извините, я должен был уточнить; ответ Джастина Этье конкретно относится к методам ActiveRecord. – Amadan

ответ

0

Model.new метод создает экземпляр всухую модель и метод Model.create дополнительно пытается сохранить его в базу данных напрямую.

Model.create метод создает объект (или несколько объектов) и сохраняет его в базе данных, если проверки проходят. Получаемый объект возвращается, был ли объект успешно сохранен в базе данных или нет.

object = Model.create не нужен object.save метод сохранения значений в базе данных.


В Model.new метода, новые объекты могут быть созданы либо пустыми (не передавать никаких параметров строительства)

В Model.new(params[:params]) предварительно установить с атрибутами, но еще не сохранен в БД (передать хэш с ключевыми именами соответствия соответствующие имена столбцов таблицы).

После object = Model.new, нам нужно сохранить объект с помощью object.save

22

Model.new

Следующая Instantiate и инициализировать почтовое образцу, приведенному в Params:

@post = Post.new(post_params) 

Вы должны запустите save, чтобы сохранить ваш экземпляр в базе данных:

@post.save 

Model.create

Следующая Instantiate, инициализировать и сохранить в базе данных Поста модель с учетом Титулы:

@post = Post.create(post_params) 

Вам не нужно выполнить команду save , он уже встроен.

Больше информации на newhere

Больше информации на createhere

+2

@ Разработчик Wasabi решил, что ваша проблема решена? –

+0

удивительный. благодаря – jasper

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