最近很多小伙伴都在问ArgumentError:关系需要类或映射器参数和关系模式中关键字是什么这两个问题,那么本篇文章就来给大家详细解答一下,同时本文还将给你拓展ArgumentCountError函
最近很多小伙伴都在问ArgumentError:关系需要类或映射器参数和关系模式中关键字是什么这两个问题,那么本篇文章就来给大家详细解答一下,同时本文还将给你拓展ArgumentCountError函数Laravel的参数太少,无法从db中提取数据并显示、ArgumentError : 初始化类时缺少关键字、ArgumentError SMTP To地址不能为空、ArgumentError: Error #1063: BasicChart/dataFunc() 的参数数量不匹配应该有 2 个,当前为 3 个等相关知识,下面开始了哦!
本文目录一览:- ArgumentError:关系需要类或映射器参数(关系模式中关键字是什么)
- ArgumentCountError函数Laravel的参数太少,无法从db中提取数据并显示
- ArgumentError : 初始化类时缺少关键字
- ArgumentError SMTP To地址不能为空
- ArgumentError: Error #1063: BasicChart/dataFunc() 的参数数量不匹配应该有 2 个,当前为 3 个
ArgumentError:关系需要类或映射器参数(关系模式中关键字是什么)
我遇到了这个奇怪的错误,我说的很奇怪,因为我对一个不相关的表进行了更改。
我正在尝试查询如下tDevice
所示的表:
class TDevice(Base): __tablename__ = ''tDevice'' ixDevice = Column(Integer, primary_key=True) ixDeviceType = Column(Integer, ForeignKey(''tDeviceType.ixDeviceType''), nullable=False) ixSubStation = Column(Integer, ForeignKey(''tSubStation.ixSubStation''), nullable=False) ixModel = Column(Integer, ForeignKey(''tModel.ixModel''), nullable=True) ixParentDevice = Column(Integer, ForeignKey(''tDevice.ixDevice''), nullable=True) sDeviceName = Column(Unicode(255), nullable=False)#added children = relationship(''TDevice'', backref=backref(''parent'', remote_side=[ixDevice])) device_type = relationship(''TDeviceType'', backref=backref(''devices'')) model = relationship(''TModel'', backref=backref(''devices'')) sub_station = relationship(''TSubStation'', backref=backref(''devices''))
这就是我的查询方式:
Device = DBSession.query(TDevice).filter(TDevice.ixDevice == device_id).one()
一旦执行此行,我就会收到错误:
ArgumentError: relationship ''report_type'' expects a class or a mapper argument (received: <class ''sqlalchemy.sql.schema.Table''>)
我所做的唯一更改是在tReportTable
其中添加了一个report_type关系,现在看起来像这样:
class TReport(Base):__tablename__ = ''tReport''ixReport = Column(Integer, primary_key=True)ixDevice = Column(Integer, ForeignKey(''tDevice.ixDevice''), nullable=False)ixJob = Column(Integer, ForeignKey(''tJob.ixJob''), nullable=False)ixReportType = Column(Integer, ForeignKey(''tReportType.ixReportType''), nullable=False) # addedreport_type = relationship(''tReportType'', uselist=False, backref=backref(''report''))device = relationship(''TDevice'', uselist=False, backref=backref(''report''))job = relationship(''TJob'', uselist=False, backref=backref(''report''))
我还是SqlAlchemy的新手,所以我似乎看不到如果我在迭代另一个表时如何添加该关系会导致此错误。
答案1
小编典典我不高兴自己,因为这是一个愚蠢的错误,但这是我的罪魁祸首:
report_type = relationship(''tReportType'', uselist=False, backref=backref(''report''))
应该:
report_type = relationship(''TReportType'', uselist=False, backref=backref(''report''))
大写的T而不是t,我应该引用的是类,而不是我的实际表名:''tReportType''
->''TReportType''
ArgumentCountError函数Laravel的参数太少,无法从db中提取数据并显示
此函数请求$ id;
public function manage_students($id)
这条路线没有通过
Route::get('admin/manage_students','AdminController@manage_students');
正如我所见,您正在按结果过滤,在这种情况下,您需要$ result id
Route::get('admin/manage_student/{id}','AdminController@manage_students');
因此您必须传递结果ID,但假设存在默认结果ID
public function manage_students($id=2)
然后该路由有效,因为$ id是可选的/预定义的。
Route::get('admin/manage_students','AdminController@manage_students');
如果您传递ID,它将使用
Route::get('admin/manage_student/{id}','AdminController@manage_students');
设置2条路由,并使参数为可选/预定义。
如果您转到/ admin / manage_student,它将使用ID 2 但是如果您通过/ admin / manage_student / 5,它将使用5
ArgumentError : 初始化类时缺少关键字
如何解决ArgumentError : 初始化类时缺少关键字?
我有一个简单的模式结果类可以在控制器上初始化,在 ruby 2.3.x
app/
..controllers
....api
......v1
.........files_controllers.rb
..jobs
..mailers
..serializers
..services
....v1
......list_result.rb
..value_objects
我放在服务目录中的一个简单模式结果类
module V1
class ListResult
attr_reader :status,:status_message,:data,:Meta
SUCCESS = 1
def initialize(status_message:,data:,Meta:)
@status = SUCCESS
@status_message = status_message
@data = data
@Meta = Meta
end
def success?
@status == SUCCESS
end
end
end
并尝试在控制器上看起来像:
V1::ListResult.new(status_message: "",data: [],Meta: {})
我收到此错误:
ArgumentError: wrong number of arguments (given 1,expected 0; required keywords: status_message,data,Meta)
from /app/services/v1/list_result.rb:10:in `initialize
但它适用于 rails 控制台
3.0.1 :001 > V1::ListResult.new(status_message: "",Meta: {})
=> #<V1::ListResult:0x00007f8d3dbaa730 @data=[],@Meta={},@status=1,@status_message="">
irb 控制台
3.0.1 :001 > class MyClass
3.0.1 :002 > def initialize(status_message:,Meta:)
3.0.1 :003 > puts "#{status_message} #{data} #{Meta}"
3.0.1 :004 > end
3.0.1 :005 > end
3.0.1 :006 > MyClass.new(status_message: "",Meta: {})
[] {}
我有 read about Separation of positional and keyword arguments in Ruby 3.0,但我不明白为什么它只能在 rails 控制台和 irb 控制台上工作?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)
ArgumentError SMTP To地址不能为空
如何解决ArgumentError SMTP To地址不能为空?
我收到ArgumentError SMTP“发送至”可能不是为测试创建的邮件程序中的空白。
我的代码与《 Rails指南》中的示例几乎相同,您可以在这里找到: https://guides.rubyonrails.org/action_mailer_basics.html
或Ruby on Rails教程: https://3rd-edition.railstutorial.org/book/account_activation_password_reset#sec-account_activation_mailer
服务器日志
Error performing ActionMailer::MailDeliveryJob (Job ID: fa1eac9b-a2e0-4b4b-aca7-c785141fd7ce) from Async(mailers) in 214.6ms: ArgumentError (SMTP To address may not be blank: []):
我的代码
# Ignore bad email addresses and do not raise email delivery errors.
# Set this to true and configure the email server for immediate delivery to raise delivery errors.
config.action_mailer.raise_delivery_errors = true
config.action_mailer.delivery_method = :smtp
host = ''sendish.herokuapp.com''
config.action_mailer.default_url_options = { host: host }
ActionMailer::Base.smtp_settings = {
:address => ''smtp.sendgrid.net'',:port => ''587'',:authentication => :plain,:user_name => ENV[''SENDGRID_USERNAME''],:password => ENV[''SENDGRID_PASSWORD''],:domain => ''heroku.com'',:enable_starttls_auto => true
}
# app/mailers/appliction_mailer.rb
class ApplicationMailer < ActionMailer::Base
default from: ''from@example.com''
layout ''mailer''
end
# app/mailer/user_mailer.rb
class UserMailer < ApplicationMailer
default from: ''notifications@example.com''
def welcome_email(user)
@user = user
@url = ''http://example.com/login''
attachments.inline[''helloworld.gif''] = File.read(Rails.root + ''public/helloworld.gif'')
mail to: user.email,subject: ''Welcome to My Awesome Site''
end
end
# app/controllers/users_controller.rb
# POST /users.json
def create
@user = User.new(user_params)
respond_to do |format|
if @user.save
# Tell the UserMailer to send a welcome email after save
UserMailer.welcome_email(@user).deliver_Now
format.html { redirect_to @user,notice: ''User was successfully created.'' }
format.json { render :show,status: :created,location: @user }
else
format.html { render :new }
format.json { render json: @user.errors,status: :unprocessable_entity }
end
end
end
def user_params
params.require(:user).permit(:name,:email,:login)
end
我看到Mailer在我的开发中正在传递地址
UserMailer#welcome_email: processed outbound mail in 26.0ms
Date: Thu,10 Sep 2020 15:01:52 -0700
From: notifications@example.com
To: user@example.com
Subject: Welcome to My Awesome Site
其他信息
问题在Heroku生产中发生
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)
ArgumentError: Error #1063: BasicChart/dataFunc() 的参数数量不匹配应该有 2 个,当前为 3 个
1、错误描述
ArgumentError: Error #1063: BasicChart/dataFunc() 的参数数量不匹配。应该有 2 个,当前为 3 个。 at mx.charts.chartClasses::Series/cacheDefaultValues()[E:\dev\4.0.0\frameworks\projects\datavisualization\src\mx\charts\chartClasses\Series.as:1260] at mx.charts.series::Lineseries/updateData()[E:\dev\4.0.0\frameworks\projects\datavisualization\src\mx\charts\series\Lineseries.as:1188] at mx.charts.chartClasses::Series/validateData()[E:\dev\4.0.0\frameworks\projects\datavisualization\src\mx\charts\chartClasses\Series.as:1950] at mx.charts.series::Lineseries/describedata()[E:\dev\4.0.0\frameworks\projects\datavisualization\src\mx\charts\series\Lineseries.as:1273] at mx.charts.chartClasses::DataTransform/describedata()[E:\dev\4.0.0\frameworks\projects\datavisualization\src\mx\charts\chartClasses\DataTransform.as:282] at mx.charts.chartClasses::AxisBase/describedata()[E:\dev\4.0.0\frameworks\projects\datavisualization\src\mx\charts\chartClasses\AxisBase.as:238] at mx.charts.chartClasses::NumericAxis/get dataDescriptions()[E:\dev\4.0.0\frameworks\projects\datavisualization\src\mx\charts\chartClasses\NumericAxis.as:1264] at mx.charts.chartClasses::NumericAxis/autoGenerate()[E:\dev\4.0.0\frameworks\projects\datavisualization\src\mx\charts\chartClasses\NumericAxis.as:1281] at mx.charts.chartClasses::NumericAxis/updateCache()[E:\dev\4.0.0\frameworks\projects\datavisualization\src\mx\charts\chartClasses\NumericAxis.as:974] at mx.charts.chartClasses::NumericAxis/update()[E:\dev\4.0.0\frameworks\projects\datavisualization\src\mx\charts\chartClasses\NumericAxis.as:1108] at mx.charts.chartClasses::NumericAxis/getLabelEstimate()[E:\dev\4.0.0\frameworks\projects\datavisualization\src\mx\charts\chartClasses\NumericAxis.as:833] at mx.charts::AxisRenderer/measureLabels()[E:\dev\4.0.0\frameworks\projects\datavisualization\src\mx\charts\AxisRenderer.as:2056] at mx.charts::AxisRenderer/calcRotationAndSpacing()[E:\dev\4.0.0\frameworks\projects\datavisualization\src\mx\charts\AxisRenderer.as:1701] at mx.charts::AxisRenderer/adjustGutters()[E:\dev\4.0.0\frameworks\projects\datavisualization\src\mx\charts\AxisRenderer.as:1565] at mx.charts.chartClasses::CartesianChart/updateAxisLayout()[E:\dev\4.0.0\frameworks\projects\datavisualization\src\mx\charts\chartClasses\CartesianChart.as:2182] at mx.charts.chartClasses::CartesianChart/updatedisplayList()[E:\dev\4.0.0\frameworks\projects\datavisualization\src\mx\charts\chartClasses\CartesianChart.as:1391] at mx.core::UIComponent/validatedisplayList()[E:\dev\4.0.0\frameworks\projects\framework\src\mx\core\UIComponent.as:8531] at mx.managers::LayoutManager/validatedisplayList()[E:\dev\4.0.0\frameworks\projects\framework\src\mx\managers\LayoutManager.as:663] at mx.managers::LayoutManager/doPhasedInstantiation()[E:\dev\4.0.0\frameworks\projects\framework\src\mx\managers\LayoutManager.as:718] at mx.managers::LayoutManager/doPhasedInstantiationCallback()[E:\dev\4.0.0\frameworks\projects\framework\src\mx\managers\LayoutManager.as:1072]
2、错误原因
<?xml version="1.0" encoding="utf-8"?> <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/mx" width="100%" height="100%" fontSize="12" fontFamily="微软雅黑"> <s:layout> <s:BasicLayout/> </s:layout> <fx:Script> <![CDATA[ import mx.charts.ChartItem; import mx.charts.chartClasses.Series; import mx.charts.series.items.LineseriesItem; import mx.collections.ArrayCollection; import mx.events.FlexEvent; import mx.graphics.stroke; [Bindable] //折线图数据绑定 private var lineArray:ArrayCollection = new ArrayCollection([ {seasons:"春季",rate:"0.48677"},{seasons:"夏季",rate:"0.122343232"},{seasons:"秋季",rate:"0.5657645"},{seasons:"冬季",rate:"0.67484889"} ]); /** * 设置折线图中比率的位数 */ public function myDataFunction(series:Series,item:Object,fieldName:String):Object { var temp:Number = item.rate; var number:String = formatter.format(temp); return number; } public function myFillFunction(item:ChartItem,index:Number):String { var curItem:LineseriesItem = LineseriesItem(item); var num:String = formatter.format(curItem.yNumber); return num; } public function myFilterFunction(item:Object):String { var temp:Number = item.rate; var number:String = formatter.format(temp); return number; } public function myDataFunction1(series:Series,fieldName:String):Object { if (fieldName == 'yValue') return(formatter.format(item.rate)); else if (fieldName == "xValue") return(formatter.format(item.seasons)); else return null; } private function dataFunc( series:Lineseries,item : Object ):Object { var df : NumberFormatter = new NumberFormatter(); df.precision = "2"; df.rounding = "up"; return df.format( item.rate); } ]]> </fx:Script> <fx:Declarations> <mx:NumberFormatter id="formatter" precision="2" rounding="up"/> </fx:Declarations> <mx:VBox width="100%" height="100%" paddingBottom="10" paddingLeft="10" paddingRight="15" paddingTop="10" horizontalAlign="center"> <mx:LineChart id="line" width="100%" height="90%" dataProvider="{lineArray}" showdatatips="true"> <mx:horizontalAxis> <mx:CategoryAxis categoryField="seasons" displayName="四季"/> </mx:horizontalAxis> <mx:horizontalAxisRenderers> <mx:AxisRenderer placement="bottom" tickLength="1" tickstroke="{new stroke(0xFF0000,1)}" axisstroke="{new stroke(0xFF0000,1)}"> <mx:axis> <mx:Linearaxis id="bottomAxis"/> </mx:axis> </mx:AxisRenderer> </mx:horizontalAxisRenderers> <mx:verticalAxisRenderers> <mx:AxisRenderer placement="left" tickLength="1" tickstroke="{new stroke(0xFF0000,1)}"> <mx:axis> <mx:Linearaxis id="leftAxis"/> </mx:axis> </mx:AxisRenderer> </mx:verticalAxisRenderers> <mx:series> <mx:Lineseries verticalAxis="{leftAxis}" displayName="比率" xField="seasons" yField="rate" dataFunction="dataFunc"/> </mx:series> <mx:filters> <fx:Array/> </mx:filters> </mx:LineChart> <mx:Legend dataProvider="{line}"/> </mx:VBox> </s:Application>
3、解决办法
我们今天的关于ArgumentError:关系需要类或映射器参数和关系模式中关键字是什么的分享就到这里,谢谢您的阅读,如果想了解更多关于ArgumentCountError函数Laravel的参数太少,无法从db中提取数据并显示、ArgumentError : 初始化类时缺少关键字、ArgumentError SMTP To地址不能为空、ArgumentError: Error #1063: BasicChart/dataFunc() 的参数数量不匹配应该有 2 个,当前为 3 个的相关信息,可以在本站进行搜索。
本文标签: