Создать модель из несвязанного представления на Rails 3.0 - PullRequest
0 голосов
/ 10 июня 2011

Я пытаюсь сделать что-то довольно простое, но я не уверен, что рельсы способ сделать это.Самое простое, у меня есть страница указателя, на которой вы можете подписаться на список рассылки.

Я пытаюсь настроить его так, чтобы вы могли добавить себя в список рассылки со страницы индекса, даже не увидевсписок рассылки.Я могу предоставить данные правильно, используя что-то вроде:

= form_for @mailing_list, :remote => true do |form| 
= if @mailing_list.errors.any?
  %ul
  = @mailing_list.errors.full_messages.each do |message| 
    %li
      = message
.field
  = form.label :email, 'Your email'
  = form.text_field :email
= form.submit "Add to Mailing List"

С контроллером:

def create
  @mailing_list = MailingList.new(params[:mailing_list])
  if @mailing_list.save
    redirect_to(:root, :notice => 'Mailing list was successfully created.') 
  else
    ? How do I return the errors ?
  end
end

Но я не могу вернуть ошибки (т. Е. Электронная почта не действительна и т. Д.).Есть ли лучший способ сделать то, что я пытаюсь?Я просто хотел бы иметь возможность вызывать и отвечать на действия контроллера MailingList из представления страницы индекса ...

Ответы [ 2 ]

0 голосов
/ 10 июня 2011

Я считаю, что вам нужна форма, которая добавит кого-то в список рассылки, не покидая эту страницу.

лучше? Хммм .. Хорошо, я скажу вам, что я делаю, и вы можете решить, что вам нравится.

Я бы использовал respond_to в контроллере, чтобы различать стандартный вызов html и удаленный вызов js. Затем я бы обработал изменения страницы в представлении. Мне нравится держать дисплей в представлениях.

Контроллер:

def create
    @mailing_list = MailingList.new(params[:mailing_list])
    if @mailing_list.save
        respond_to do |format|
            format.html { redirect_to(:root, :notice => 'Mailing list was successfully created.') }
            format.js { render }    
        end 
    else
        respond_to do |format|
            format.html { render }
            format.js { render :errors }
        end
    end
end

create.js.erb

$('#errors').html('').hide();
$('form').html('Mailing list was successfully created.'); // needs a better element

errors.js.erb

$('#errors').html('<%= escape_javascript(@mailing_list.errors.full_messages.collect { |msg| content_tag :li, msg }.join().html_safe) %>').show();
0 голосов
/ 10 июня 2011

Вы можете сделать что-то с объектом ошибок в @mailing_list, например,

flash.now[:error] = @mailing_list.errors.full_messages
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...