2010-05-24 15 views
2


Я изучаю рельсы и немного разбираюсь в книге и создаю простое приложение с добавленной функциональностью, поскольку я увеличиваю свои знания. Я пишу простое приложение для блога, и у меня есть поле в форме с именем date, я не хочу, чтобы это было поле, я хочу, чтобы он получил дату с сервера и автоматически помещал его в базу данных. Как мне это сделать? Я думал о скрытом поле, но затем не знаю, как обрабатывать дату и вставлять ее в скрытое поле. Это неправильный способ обойти вещи?
Спасибо заранее,
ДинТекущая дата в виде рельсов

ответ

6

Я бы не использовать скрытое поле, потому что даже если он скрыт пользователь может управлять этим. Я думаю, что лучший способ решить эту проблему, игнорировать дату в форме и добавить дату вам вашу модель в действии контроллера прямо перед сохранением объекта:

def SomeController 
    #... 
    def create 
    @model = Model.new params[:model] 
    @model.date_field_name = Time.now 
    if @model.save 
     # whatever should be done if validation passes or 
     redirect_to @model 
    else 
     # whatever should be done if validation fails or 
     render :new 
    end 
    end 
    #... 
end 

Но вы не должны делать любое из этого, потому что рубин на рельсах предлагает две колонки created_at и updated_at. created_at будет установлен, когда объект будет создан, и updated_at будет установлен каждый раз при обновлении этого объекта.

+0

Is updated_at установлен, когда объект добавляется в базу данных? Как мне интересно, могу ли я просто изменить свое мнение на заказ update_at? – Dean

+0

Да, когда объект добавляется в базу данных 'updated_at', это то же самое, что' created_at' – jigfox

0

В Rails, если вы даете свои модели атрибутам с определенными именами, тогда ActiveRecord дает им особое поведение. Есть четыре различных даты/связанных со временем из них:

  • created_on: получает автоматически устанавливается на дату записи был создан
  • created_at: получает автоматически устанавливается на дату и время записи был создан
  • updated_on: получает автоматически устанавливается на дату записи был обновлен
  • updated_at: получает автоматически устанавливается на дату и время записи был обновлен

Обычно пары created_at/updated_at автоматически добавляются в модель по объявлению t.timestamps в связанной с моделью ActiveRecord Migration.

1

здесь вид (новый) в виде отображения текущей даты:

<% form_for(@recipe) do |f| %> 
    <%= f.error_messages %> 

    <p> 
    <%= f.label :title %><br /> 
    <%= f.text_field :title %> 
    </p> 
    <p><b>date</b><br/> 
    <%= f.datetime_select :date %> 
    </p> 
    <p> 
    <%= f.label :instructions %><br /> 
    <%= f.text_area :instructions %> 
    </p> 
    <p> 
    <%= f.submit 'Create' %> 
    </p> 
<% end %> 

<%= link_to 'Back', recipes_path %> 

и контроллер:

def new 
    @recipe = Recipe.new 

    respond_to do |format| 
    format.html # new.html.erb 
    format.xml { render :xml => @recipe } 
    end 
end 
Смежные вопросы