2013-08-14 2 views
2

Я использую CalendarHelper здесь http://railscasts.com/episodes/213-calendars-revisedУстановка даты с формой для календаря

Он отображает текущий месяц, который получает подобран так:

class XyController < ApplicationController 
@date ||= Date.today 

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

= simple_form_for(@date) do |f| 
    = f.input ??? 

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

Редактировать .:

calendar_helper.rb

module CalendarHelper 
    def calendar(date = Date.today, &block) 
    Calendar.new(self, date, block).table 
    end 

    class Calendar < Struct.new(:view, :date, :callback) 
    HEADER = %w[Hétfő Kedd Szerda Csütörtök Péntek Szombat Vasárnap] 
    START_DAY = :monday 

    delegate :content_tag, to: :view 

    def table 
     content_tag :table, class: "calendar" do 
     header + week_rows 
     end 
    end 

    def header 
     ... 
    end 

    def week_rows 
     ... 
    end 

    def day_cell(day) 
     ... 
    end 

    def day_classes(day) 
     ... 
    end 

    def weeks 
     ... 
    end 
    end 
end 

в представлении:

= calendar do |date| 
    = date.day 

Так в помощнике есть дата = Date.today, я хотел бы измените это на экземпляр @date и хотите установить это в простом представлении, например .:

profiles_controller.rb

def show 
    @date ||= Date.today 
end 

И в представлении, как:

form_for (@date) сделать | F | f.date_select: Дата

Что-то вроде этого, но это, очевидно, не работает и не правильно

+0

Привет, вы можете показать контроллер и просмотреть код? – tadejm

+0

Контроллер не имеет значения. Я хочу только установить поле даты в форме в представлении представления, как params [: date] или подобное, перезагрузить страницу и установить с ней переменную @date. И я не знаю, как это сделать. –

ответ

1

Вы не должны использовать эту форму для этой функции, вы можете использовать Javascript:

# view 
<%= select_date(@date, {}, onchange: 'reload_with_date($(this))') %> 

<%= javascript_tag do %> 
    # this function will get the date selected 
    # and reload the page with the params[:date] 
    window.reload_with_date = function(select_tag) { 
    var date = Date.parse($(select_tag).val()); # get the selected date 
    var current_url = window.location.href; # get the current URL 
    if(current_url.indexOf('?') > -1) { # if already GET params in URL 
     window.location.href = current_url += '&date=' + date.toString(); 
    } else { 
     window.location.href = current_url += '?date=' + date.toString(); 
    } 
    } 
<% end %> 

# controller 
def calendar 
    @date = params[:date] || Date.today 
    # will set @date to Date.today if params[:date].nil? 

Документация о select_date:

Не стесняйтесь спрашивать об этом, если вам нужно. Надеюсь это поможет!

+0

Вот что я искал! Благодаря! –

+0

Добро пожаловать! Вы также можете взглянуть на функцию * very nice * datepicker, включенную в jQuery UI: http://api.jqueryui.com/datepicker/ – MrYoshiji

0
<%= f.date_select(:dob,:start_year => 1950) %> 

это должно работать для вас. Вот как я писал в .html.erb, вы можете написать это своим путем. Но именно так может быть создан сборщик дат.

+0

'= form_for (@date) do | f | = f.date_select (: date,: start_year => 1999) ' Дает мне это: undefined method' model_name 'для Date: Class –

0

Использование form_for с переменной используется для bind a form to an object, что означает, что каждое поле формы соответствует полю объекта.

Например, предположим, что у вас есть поле пользователя с именем пользователя и поле возраста, вы можете сделать следующее:

контроллер

@user = User.find(params[:id]) 

Посмотреть

<%= form_for(@user) do |f| %> 
    <%= f.text_field :username %> 
    <%= f.text_field :age %> 
<% end %> 

Имя пользователя, и возрастные поля будут автоматически установлены на значения текущего пользователя.

Теперь, для вашего случая.

(Я полагаюсь на эпизоде ​​старых календарей на railscast здесь: http://railscasts.com/episodes/213-calendars)

Если форма логически связана с активной записью, вы можете использовать calendar_for помощник как если бы вы использовали form_for помощника.

Так что, если ваш объект пользователь:

calendar_for @user, :year => @date.year, :month => @date.month 

В противном случае, вам придется использовать обычный form_tag помощник без объекта, связанного с ним, и использовать calendar_date_select_tag помощника для вставки календаря.

Больше информации на этом помощнике in the docs

Не стесняйтесь задавать любые последующие вопросы.

+0

Я обновил свой вопрос с дополнительной информацией. –

0

Я использую этот подход:

- if @user.content_date 
    %br/ 
    = f.text_field :content_date, id: 'datepicker', size: 10 
    %br/ 

с этим идентификатором используется, чтобы забрать его.

0

Я подозреваю, что что-то похожее на это будет работать

#view 
= simple_form_for(@date) do |f| 
    = f.input :date 
Смежные вопросы