Я тоже новичок, так что жди более изящных ответов.
Но одним из способов решения этой проблемы было бы использование before_filter в Application Controller, чтобы всегда устанавливать новую переменную экземпляра MainCoupon при обслуживании каждого действия. После этого вы можете использовать рендер 'maincoupon / form' для рендеринга формы в макете. Форма должна работать должным образом, поскольку переменная need экземпляра была установлена before_filter.
Это может выглядеть примерно так:
# application_controller.rb
class ApplicationController < ActionController::Base
# other stuff
before_filter :new_coupon
# other stuff
def new_coupon
@maincoupon = MainCoupon.new
end
end
В макете вы можете иметь
<% = render 'maincoupons/form' %>
Или еще лучше, используя HAML, просто:
= render 'maincoupons/form'
Как правило, ваше новое действие связано с представлением, в котором пользователь вводит информацию в форму. Новое действие в контроллере создает новый объект @maincoupon = MainCoupon.new
желаемого типа, который используется в качестве «скаффолда» для построения формы.
Когда пользователь отправляет, информация о форме упаковывается и отправляется в качестве параметра в действие создания, которое берет информацию, отправленную из формы, и использует ее для создания нового объекта нужного типа.
@maincoupon = MainCoupon.new(params[:maincoupon])
После этого он использует метод @maincoupon.save
, чтобы сохранить его в базе данных.
Вы можете попробовать соответствующие методы модели самостоятельно в консоли (rails console).
Например:
> A = User.new
Создает нового пользователя, но не сохраняет его в БД.
Вы могли бы продолжать так:
> A.name = "Apa"
> A.save
Это сразу создаст и сохранит.
> User.create(:name => "Apa")