DatePicker JQuery UI и рельсы 3 (.1) - PullRequest
       2

DatePicker JQuery UI и рельсы 3 (.1)

2 голосов
/ 09 августа 2011

Привет, я использую инструмент выбора даты jquery ui в сочетании с рельсами 3.1. Выбор даты выглядит великолепно, только дата не сохраняется в базе данных? Только иногда...? Так что это сложная ошибка.

Это мой файл .js:

$(function() { 
    $("#question_deadline").datepicker({ duration: 'fast', maxDate: '+2m', minDate: 'now', showOn: "button", buttonImage: "calendar.gif", buttonImageOnly: true });
    $("#question_deadline").datepicker("option", "showAnim", "drop");
    $("#question_deadline").datepicker("option", "dateFormat", "DD, d MM, yy"); 
});

В моем контроллере есть простой скрипт rails:

def create    
    @question = Question.new(params[:question])


    if @question.save
      redirect_to questions_path, :notice => "Successfully created question."
    else
      setup_questions
      render :index
    end
  end

В файле представлений _form.html.erb я использую текстовое поле для отображения даты:

  <div class="field">
    <%= f.label :content, "Question" %><br />
    <%= f.text_field :content, :placeholder => "type your question here.." %>
    <%= f.text_field :deadline %><br /> 
  </div>

Есть ли люди, которые имеют опыт работы с datepiacker jquery ui и rails, эпизод с Райаном Бейтсом, не решил его, я думаю, что это было написано в rails 2.3?

С уважением, Тайс

Ответы [ 3 ]

1 голос
/ 06 сентября 2011

Я думаю, Rails / Ruby не может проанализировать дату в этом формате:

$("#question_deadline").datepicker("option", "dateFormat", "DD, d MM, yy");
// full day name, day (w/o leading zero), full month name, 4-digit year

В вашем контроллере вы можете добавить строку, такую ​​как

def create/update
  ...
  @question.deadline = DateTime.strptime(params[:question][:deadline], '%A, %d %B, %Y')
  # assuming my jquery-to-ruby format-mapping is adequate ;-)
  if @question.save
    ...
end

Помните, что этот код легко разбивается на искаженные строки даты.

Если вы не хотите менять формат, например 'yy-mm-dd' (в Ruby-land это '%Y-%m-%d'), вы можете захотетьзаполнить выбранную дату другим элементом HTML с помощью опции altField и скрыть фактическое поле ввода даты с помощью CSS:

$("#somewhere_else").datepicker(
  dateFormat: "%yy-%mm-%dd",
  altField:   "#question_deadline",
  altFormat:  "DD, d MM, yy",
  ...
);
<%= form_for @question do |f| %>
  ...
  <%= text_field_tag 'somewhere_else', @question.deadline %>
  <%= f.hidden_field :deadline %>
  ...
<% end %>

Это будет работать, по крайней мере, дляя: -)

- Доминик

1 голос
/ 11 августа 2011

Во-первых, вам нужно показать нам вид, где у вас есть элемент datepicker.Если это так:

<input type="text" name="question_deadline" id="question_deadline" />

Когда вы отправляете эту форму, параметры, которые вы получаете в вашем контроллере (в методе "create"), называются question_deadline.Таким образом, в этом методе создания вы должны сначала написать:

if params[:question_deadline] != ""
    params[:question][:question_deadline] = params[:question_deadline]
end
#add a else if this date field is compulsory in the database

Этот шаг важен, потому что метод create будет читать материал из params [: question] [: question_deadline], а не из params [: question_deadline], который возвращаетсяс точки зрения.Таким образом, params [: question] [: question_deadline] пуст, когда вы делаете @ question.save

Чтобы отобразить дату, вам также необходимо показать нам метод контроллера "show", который должен выглядеть примерно так:

@question = Question.find(params[:id]) #or any sql request that returns info about a question.

Затем в представлении вы можете получить его просто с помощью:

<%= @question.question_deadline%>

Может быть, с большим количеством кода от вашего контроллера и представления, я могу уточнить это.

0 голосов
/ 11 января 2012

Другой вариант - обновить способ синтаксического анализа дат ActiveSupport.Это указано в Формат даты по умолчанию в Rails (необходимо, чтобы он был ddmmyyyy)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...