加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – Rails 3 – 未定义的方法`delivery_handler =

发布时间:2020-12-17 03:47:23 所属栏目:百科 来源:网络整理
导读:我有交货问题. 我得到了这个错误: NoMethodError in PagesController#send_messageundefined method `delivery_handler=' for # Message:0x00000004db9648app/mailers/contact.rb:22:in `send_email'app/controllers/pages_controller.rb:65:in `send_messa
我有交货问题.

我得到了这个错误:

NoMethodError in PagesController#send_message
undefined method `delivery_handler=' for #< Message:0x00000004db9648>

app/mailers/contact.rb:22:in `send_email'
app/controllers/pages_controller.rb:65:in `send_message'

无论如何,这是我的代码:

/views/pages/contact.html.erb

<h1><%= @page.title %></h1>
<%= @page.content.html_safe %>

    <%= form_for @message,:url => "/pages/send_message" do |f| %>
    <% if flash[:notice] %>
        <% flash[:notice].full_messages.each do |msg| %>
            <p><%= msg %></p>
        <% end %>
    <% end %>
    <div class="field">
      <%= f.label :email %>
      <%= f.text_field :email %>
    </div>
    <div class="field">
      <%= f.label :body %>
      <%= f.text_area :body %>
    </div>
    <%= f.submit "Envoyer" %>
    <% end %>

/models/message.rb

class Message
       include ActiveModel::Validations
       include ActiveModel::Conversion
       extend ActiveModel::Naming

       attr_accessor :email,:body

       validates :email,:body,:presence => true
       validates :email,:format => { :with => %r{.+@.+..+} },:allow_blank => true

       def initialize(attributes = {})
         attributes.each do |name,value|
           send("#{name}=",value)
         end
       end

       def persisted?
         false
       end
     end

* /控制器/ pages_controller.rb *

def send_message
      @message = Message.new(params[:message])

      if @message.valid?
        Contact.send_email(@message).deliver
        redirect_to request.referer,:notice => "Le message a &eacute;t&eacute; envoy&eacute;."
      else
        redirect_to request.referer,:notice => "Vous n'avez pas entrer votre email."
      end
    end

/app/mailers/contact.rb

class Contact < ActionMailer::Base
        attr_accessor :email,:message

        default to: "bla@bla.com"
        default from: "blo@blo.com"

        def send_email(message)
          @message = message
          mail(:subject => "Nouveau contact blo")
        end
      end

/config/environments/development.rb

config.action_mailer.default_url_options = {
        host: 'localhost:3000'
    }
    config.action_mailer.perform_deliveries = true
    config.action_mailer.delivery_method = :sendmail
    config.action_mailer.sendmail_settings = {
        location: '/usr/sbin/sendmail',arguments: "-i -t -f contact@test.com"
    }

解决方法

在邮件程序中,删除attr_accessor:消息或将其称为其他内容.

ActionMailer :: Base已经有一个消息访问器来获取/设置正在构建的Mail :: Message,因此一些rails正在调用消息,期望获得一个Mail :: Message但是正在获取Message类.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读