2015-07-08 6 views
1

Быстрый начальный вопрос о new и create методов. Руководство Рубин показывает этот пример:Beginner Rails CRUD

def new 
    @article = Article.new 
end 

def create 
    @article = Article.new(article_params) 

    if @article.save 
    redirect_to @article 
    else 
    render 'new' 
    end 
end 

В другом примере в руководстве, оператор @article = Article.new не был использован в new метод, который имеет больше смысла для меня. В представлении new не требуется @article, form_for принимает параметр имени модели, затем определяет переменную для методов формы для использования внутри |something|. Итак, зачем нам устанавливать @article = Article.new и есть @article для просмотра?

ответ

1

Согласно документации (http://guides.rubyonrails.org/form_helpers.html#binding-a-form-to-an-object) ваша форма (если он создан с form_for) необходим экземпляр модели, чтобы связать т он вводит атрибуты модели. Таким образом, вы говорите, что у вас есть новый article экземпляр и ваши поля формы отображает его атрибуты, так что, когда форма была отправлена, вы получите Params в виде:

articles: {attributte1: 'something', attributte2: 'somethingelse'} 

Таким образом, вы можете заполнить экземпляр объекта, указав @article = Article.new(article_params), так как article_params заселен внутри вашего контроллера.

1

Вы пишете форму для «создания» статьи, класс статьи может иметь некоторые значения по умолчанию, которые вы можете показать в форме, таким образом, вам не нужно заботиться об этом в представлении сам.

Также, таким образом, независимо от того, что у вас есть, оно находится в том же месте, вам не нужно обновлять два файла.

1

Ниже оба эквивалентны -

1. form_for(@article...........) /* @article = Article.new */ 
2. form_for(:article...........) 

Для получения более подробной информации см http://apidock.com/rails/ActionView/Helpers/FormHelper/form_for

Но в Rails, мы пишем DRY код. Таким образом, мы используем тот же article_form и переменную экземпляра @article для new и edit метод и да, эта переменная экземпляра имеется ввиду -

def new 
    @article = Article.new /* this is new article */ 
end 

def edit 
    @article = Article.find params[:id] /* Already exists in database */ 
end 

и просмотр файлов -

new.html.erb и edit.html .erb имеют такой же вид,

<%= render "article_form" %> 
Смежные вопросы