当前位置: 首页 > 知识库问答 >
问题:

铁路4的动作邮件

韦望
2023-03-14

为了创建一个联系人表单,然后创建一个发送给站点管理员的邮件程序,我一直在遵循一个相当古老的教程。我遇到了一些问题,我想,因为我在Rails4.1上。1而且教程太旧了!我想知道是否有人能给我一些指导——我正在学习rails。我当前收到的错误是MessagesController为主题消息创建未定义的方法“subject”中的NoMethodError。主题

这是我的密码

消息控制器:

class MessagesController < ApplicationController
  before_action :set_message, only: [:show, :edit, :update, :destroy]

  # GET /messages
  # GET /messages.json
  def index
    @messages = Message.all
  end

  # GET /messages/1
  # GET /messages/1.json
  def show
  end

  # GET /messages/new
  def new
    @message = Message.new
  end

  # GET /messages/1/edit
  def edit
  end

  # POST /messages
  # POST /messages.json
  def create
    @message = Message.new(message_params)

respond_to do |format|
  if @message.save
    ContactMailer.deliver_message(@message)
    flash.now[:notice] = 'Thank you for your message!'
    format.html { redirect_to root_path }
    format.json { render :show, status: :created, location: @message }
  else
    format.html { render :new }
    format.json { render json: @message.errors, status: :unprocessable_entity }
  end
end

终止

#PATCH/PUT/messages/1#PATCH/PUT/messages/1。json def update respond|u to do | format | if@message。更新(消息参数)格式。html{重定向到@message,注意:'消息已成功更新。}格式。json{render:show,status::ok,location:@message}else格式。html{呈现:编辑}格式。json{render json:@message.errors,status::unprocessable_entity}end

#删除/messages/1#删除/messages/1。json def destroy@message。销毁响应|格式|格式。html{redirect_to messages_url,注意:'Message已成功销毁。}格式。json{head:no_content}end

private#使用回调在操作之间共享公共设置或约束。def set_message@message=message。查找(参数[:id])结束

# Never trust parameters from the scary internet, only allow the white list through.
def message_params
  params.require(:message).permit(:name, :email, :company, :phone, :subject, :body)
end

终止

development.rb:

Rails.application.configure do
  # Settings specified here will take precedence over those in config/application.rb.

  # In the development environment your application's code is reloaded on
  # every request. This slows down response time but is perfect for development
  # since you don't have to restart the web server when you make code changes.
  config.cache_classes = false

  # Do not eager load code on boot.
  config.eager_load = false

  # Show full error reports and disable caching.
  config.consider_all_requests_local       = true
  config.action_controller.perform_caching = false

  # Don't care if the mailer can't send.
  config.action_mailer.raise_delivery_errors = true

  config.action_mailer.delivery_method = :smtp
  config.action_mailer.smtp_settings = {
    address: "smpt.gmail.com",
    port: "587",
    domain: "gmail.com",
    authentication: "plain",
    enable_starttls_auto: true,
    user_name: 'your_email_username',
    password: 'your_email_password'
  }

  CONTACT_RECIPIENT = 'yourname@yourdomain.com'
  # Print deprecation notices to the Rails logger.
  config.active_support.deprecation = :log

  # Raise an error on page load if there are pending migrations.
  config.active_record.migration_error = :page_load

  # Debug mode disables concatenation and preprocessing of assets.
  # This option may cause significant delays in view rendering with a large
  # number of complex assets.
  config.assets.debug = true

  # Adds additional error checking when serving assets at runtime.
  # Checks for improperly declared sprockets dependencies.
  # Raises helpful error messages.
  config.assets.raise_runtime_errors = true

  # Raises error for missing translations
  # config.action_view.raise_on_missing_translations = true

  # Required for Devise gem
  config.action_mailer.default_url_options = { :host => 'localhost:3000' }

end

class ContactMailer < ActionMailer::Base
  default from: "from@example.com"

  # Subject can be set in your I18n file at config/locales/en.yml
  # with the following lookup:
  #
  #   en.contact_mailer.message.subject
  #

    def message(message)
    subject    message.subject
    body       :message => message
    recipients CONTACT_RECIPIENT
    from       message.email
    sent_on    Time.now
    end

  end
end

消息html。雇员再培训局

Email from your web site

From: <%= @message.name %>

Company: <%= @message.company %>

Phone: <%= @message.phone %>

Message: <%= @message.body %>

信息/_形式。html。雇员再培训局

<%= semantic_form_for @message do |f| %>
  <%= f.inputs do %>
    <%= f.input :name %>
    <%= f.input :company %>
    <%= f.input :phone %>
    <%= f.input :email %>
    <%= f.input :subject %>
    <%= f.input :body %>
  <% end %>

  <%= f.actions do %>
    <%= f.action :submit, :as => :input %>
  <% end %>
<% end %>

数据库模式文件的相关部分

 create_table "messages", force: true do |t|
    t.string   "name"
    t.string   "company"
    t.string   "phone"
    t.string   "email"
    t.string   "subject"
    t.text     "body"
    t.datetime "created_at"
    t.datetime "updated_at"
  end

共有1个答案

颛孙正谊
2023-03-14
def deliver_message(message)
  subject    message.subject
  body       :message => message
  recipients CONTACT_RECIPIENT
  from       message.email
  sent_on    Time.now
end

应该是

def deliver_message(message)
  @message = message
  mail(subject: message.subject, body: message.body, recipients: CONTACT_RECIPIENT, from: message.email, sent_on: Time.now)
 end
 类似资料:
  • 我最近升级到Rails 4,在运行我的请求规范时,我开始收到以下错误: 失败/错误:无法从回溯链轮中找到匹配行::ArgumentError:资产逻辑路径没有扩展名:europe 有没有办法让链轮接受没有扩展名的文件? 宝石: 链轮: 2.10.1 导轨: 4.0.2

  • 跟随Redis酒吧/酒吧 这很好用,我可以使用 使用redis cli 当我在另一个类(listener类)中将订户块添加到该通道时,问题就开始了,如下所示 在<代码>redis-cli中 问题是,当我将subscriber listener类添加到同一个rails应用程序时。。。它停止工作,因为侦听redis服务器并停止执行任何其他代码。。。它只是坐在那里听着。 那么,有没有办法在同一个rail

  • 我在heroku上部署了一个带有puma的rails应用程序。一切似乎都很好,除非我在dev env中启动我的应用程序,端口是5000而不是3000。 为什么会发生这种情况?根据我的配置文件,它应该回落到3000,就像线程和并发数一样(这些工作正常)。 Procfile.dev 配置/puma.rb 使用

  • 我使用聚合物起动器套件1.0。2,我正试图根据我找到的(很少)文档使用iron表单。 我的方法表单是“帖子”,只包含一个输入。 我的表单“action”是一个PHP脚本(add.PHP),显示$\u GET和$\u POST的内容: 我的表单组件(form_eclp.html)是: 我打电话如果从: 当我在名称输入中输入文本“测试”后点击提交按钮时,我可以在浏览器开发工具的网络选项卡中看到这是一个

  • 路线。php 控制器:admin_news.php 型号:News_model.php 视图:管理员/新闻/edit.php

  • 我的windows 8笔记本电脑上的railsinstaller一直存在问题,原因是无法使用命令在(项目)目录中运行服务器。然而,与许多教程相反,我每次都会收到这个问题。 然后,当我尝试运行bundle安装时,它返回此错误。 但我试图解决“FetchError”的一切都是徒劳的。 有人能帮我解决这个错误吗?