2015-04-22 1 views
1

В моей contact.html, у меня есть этот кодРубин на Rails паров отсутствуют или значение пусто без использования модели

  <div class="form"> 
       <form name="email-form" method="POST"> 
        <label class="field-label" for="name">Name:</label> 
        <input class="w-input text-field-2" id="name" type="text" name="name" data-name="Name" required="required"> 
        <label class="field-label" for="Email">Email:</label> 
        <input class="w-input text-field-2" id="email" type="email" name="email" data-name="Email" required="required"> 
        <label class="field-label" for="Subject">Subject:</label> 
        <input class="w-input text-field-2" id="subject" type="text" name="subject" data-name="Subject"> 
        <label class="field-label" for="Content">Text Message:</label> 
        <textarea class="w-input text-field-2 area" id="content" name="content" data-name="Text Area" required="required"></textarea> 
        <div> 
         <input class="w-button button" type="submit" value="Submit Message" data-wait="Please wait..."> 
        </div> 
       </form> 
      </div> 

Это под моего контроллером

def contact 

end 

def send_mail 
    MessageMailer.new_message(contact_params).deliver 
    redirect_to contact_path, notice: 'Your messages has been sent.' 
end 

private 
    def contact_params 
     params.require(:contact).permit(:name, :email, :subject, :content) 
    end 

под почтовыми программами/message_mailer.rb

class MessageMailer < ActionMailer::Base 
    default from: "[email protected]" 
    default to: "[email protected]" 

    def new_message(contact) 
     @contact = contact 

     mail subject: @contact.subject 
    end 
end 

и под моим new_message.text.erb этот код

Name: <%= @contact.name %> 
Email: <%= @contact.email %> 
Message: <%= @contact.content %> 

Я отправить письмо, состоящее имя пользователя, адрес электронной почты и сообщение, которое и занесены НЕ сохраненные в базе данных. Когда я прохожу четыре параметра, как этот

def send_mail 
    MessageMailer.new_message(:name, :email, :subject, :content).deliver 
    redirect_to contact_path, notice: 'Your messages has been sent.' 
end 

он работал нормально, но мне сказали, чтобы использовать только один параметр, кажется, группа четыре параметра: name, email, subject, content, как один (contact)

Когда я напечатал info и нажмите кнопку отправки, я получаю это сообщение об ошибке param is missing or the value is empty: contact Я предполагаю, что причиной этой ошибки является то, что мой def contact пуст. Поэтому я добавил contact.new и @contact=contact.new и MessageMailer.new, но эта ошибка возникает NoMethodError

Как я могу это исправить? Что я должен писать под своим def contact?

+0

contact.new не работает, то это будет Contact.new – ppascualv

ответ

1

Ваш код контроллера правильный. Вам не нужно Contact.new или что-то в этом роде. Проблема с вашим <form>. То, что заканчивается в params, зависит от вашей формы и в вашей форме у вас нет contact.

Вместо:

<input type="text" name="subject"> 

Вы должны сделать что-то вроде этого:

<input type="text" name="contact[subject]"> 

и что для всех полей на контактную форму.

Другим вариантом является использование помощников формы Rails.

+1

Ах да, это возможность тоже :) –

+0

она работала ... большое спасибо! – MAC

1

contact[] отсутствует в вашей форме, смотрите ниже правильному:

 <div class="form"> 
      <form name="email-form" method="POST"> 
       <label class="field-label" for="name">Name:</label> 
       <input class="w-input text-field-2" id="name" type="text" name="contact[name]" data-name="Name" required="required"> 
       <label class="field-label" for="Email">Email:</label> 
       <input class="w-input text-field-2" id="email" type="email" name="contact[email]" data-name="Email" required="required"> 
       <label class="field-label" for="Subject">Subject:</label> 
       <input class="w-input text-field-2" id="subject" type="text" name="contact[subject]" data-name="Subject"> 
       <label class="field-label" for="Content">Text Message:</label> 
       <textarea class="w-input text-field-2 area" id="content" name="contact[content]" data-name="Text Area" required="required"></textarea> 
       <div> 
        <input class="w-button button" type="submit" value="Submit Message" data-wait="Please wait..."> 
       </div> 
      </form> 
     </div> 
+0

i havnt 'seen, stackoverflow не перезагружает страницу, чтобы увидеть его, я готовил/форматировал свой ответ – user3118220