我正在尝试关注Ryan Bates RailsCast#196:嵌套模型表单第1部分.Ryans版本有两个明显的区别:1)我正在使用内置脚手架而不是他正在使用的漂亮,2)我正在运行rails 4(我真的不知道Ryans在他的演员阵容中使用的是什么版本,但它不是4).
所以这就是我做的
rails new survey2
cd survey2
bundle install
rails generate scaffold survey name:string
rake db:migrate
rails generate model question survey_id:integer content:text
rake db:migrate
Run Code Online (Sandbox Code Playgroud)
然后我将关联添加到模型中
class Question < ActiveRecord::Base
belongs_to :survey
end
Run Code Online (Sandbox Code Playgroud)
所以
class Survey < ActiveRecord::Base
has_many :questions
accepts_nested_attributes_for :questions
end
Run Code Online (Sandbox Code Playgroud)
然后我添加了嵌套视图部分
<%= form_for(@survey) do |f| %>
<!-- Standard rails 4 view stuff -->
<div class="field">
<%= f.label :name %><br>
<%= f.text_field :name %>
</div>
<div class="field">
<%= f.fields_for :questions do |builder| %>
<div>
<%= …Run Code Online (Sandbox Code Playgroud) 我已将Devise添加到我的Rails 4应用程序中,并成功将用户名等添加到我的用户模型中.此外,我能够使用lazy way™存储这些字段,即
class ApplicationController < ActionController::Base
before_filter :configure_permitted_parameters, if: :devise_controller?
protected
def configure_permitted_parameters
devise_parameter_sanitizer.for(:sign_up) { |u| u.permit(:email, :password, :password_confirmation, :firstname, :middlename, :lastname) }
end
end
Run Code Online (Sandbox Code Playgroud)
但是,我试过了
def configure_permitted_parameters
devise_parameter_sanitizer.for(:sign_up) { |u| u.permit(:email, :password, :password_confirmation, :firstname, :middlename, :lastname) }
devise_parameter_sanitizer.for(:edit) { |u| u.permit(:email, :password, :password_confirmation, :firstname, :middlename, :lastname) }
end
Run Code Online (Sandbox Code Playgroud)
但是这并没有像预期的那样工作(编辑动作调用时没有存储用户名).为了让它发挥作用,我还需要做些什么吗?谢谢!
我有两个问题(其中至少有一个是关于D2010中的RTTI和动态实例)
TRTTIConstructor.Invoke.在相邻的项目符号点中,可以找到"动态构造实例而无需虚拟构造函数和元类".这似乎是一个很棒的功能(正是我需要的,顺便说一下)!但是,当我查看D2010文档(ms-help://embarcadero.rs2010/vcl/Rtti.html)时,我找不到它.它被撤销了吗?我一直在Delphi的对象实际上引用的内存位置,这反过来我想象存储为指针变量的印象.
现在,我想从一个物体制作一个TValue.考虑一下:
TValue.Make(AObject, TypeInfo(TMyObject), val);
Run Code Online (Sandbox Code Playgroud)
哪里val: TValue.这不行.实际上,后续使用val会导致访问冲突.但是,如果我们使用address-of运算符,如下所示:
TValue.Make(@AObject, TypeInfo(TMyObject), val);
Run Code Online (Sandbox Code Playgroud)
一切都很好.对我来说,这是出乎意料的,因为我认为AObject(引擎盖下)实际上是一个指针.我错了,或者这是TValue.Make方法的怪癖?有人可以赐教吗?
我最近在这个论坛上发布了一个问题,询问有关DXE2可执行文件中缺少RTTI信息的任何建议.
那篇文章是我实际案例的精简版.RRUZ来救援,因此被剥离的版本很快得到了解决.但是,最初的问题仍然存在,所以我现在正在全力发布."主要":
program MissingRTTI;
{$APPTYPE CONSOLE}
uses
System.SysUtils, RTTI, MyUnit in 'MyUnit.pas', RTTIUtil in 'RTTIUtil.pas';
var
RHelp: TRttiHelper;
begin
RHelp := TRttiHelper.Create();
if (RHelp.IsTypeFound('MyUnit.TMyClass')) then WriteLn('TMyClass was found.')
else WriteLn('TMyClass was not found.');
ReadLn;
RHelp.Free();
end.
Run Code Online (Sandbox Code Playgroud)
RTTIUtil.pas:
unit RTTIUtil;
interface
uses
MyUnit;
type
TRttiHelper = class(TObject)
public
function IsTypeFound(TypeName: string) : boolean;
end;
implementation
uses
RTTI;
function TRttiHelper.IsTypeFound(TypeName: string): boolean;
var
rCtx: TRttiContext;
rType: TRttiType;
begin
Result := false;
rCtx := TRttiContext.Create();
rType := rCtx.FindType(TypeName);
if (rType …Run Code Online (Sandbox Code Playgroud) 我正在尝试调整作为参数传递的某个类的数组,例如
procedure Resize(MyArray: Array of TObject);
begin
SetLength(MyArray, 100);
end;
Run Code Online (Sandbox Code Playgroud)
但是,这会引发错误"E2008不兼容类型".是不是你不能这样做(我看过谣言,但没有官方文件)或者我做错了什么?
有没有办法确定作为方法参数传递的变量的类型?考虑班级:
TSomeClass = class
procedure AddToList<T: TDataType; U: TListClass<T>>(Element: T; List: U);
end;
Run Code Online (Sandbox Code Playgroud)
与方法实现
procedure TSomeClass.AddToList<T, U>(Element: T; List: U);
begin
if Element is TInt then
List.AddElement(TInt.Create(XXX))
else if Element is TString then
List.AddElement(TString.Create(YYY));
end;
Run Code Online (Sandbox Code Playgroud)
其中TInt.Create()和TString.Create()具有不同的参数集,但它们都继承自TDataType.
现在,我知道 - is操作员不能像这样使用,但是有没有合法的替代方案来做我在这里要求的事情?
我想使用IEnumerator<T>而不是IEnumerator我正在建立的列表.我尝试了以下内容
IMyList = interface(IEnumerator<TElement>)
procedure Add(Element: TElement);
end;
TMyList = class(TInterfacedObject, IMyList )
private
function GetCurrent: TElement;
function MoveNext: Boolean;
procedure Reset;
public
property Current: TElement read GetCurrent;
procedure Add(Element: TElement);
end;
Run Code Online (Sandbox Code Playgroud)
但令我惊讶的是,我被告知TMyList没有实施GetCurrent.为什么编译器告诉我GetCurrent当它显然没有时会丢失?(为了记录,GetCurrent已实现,为简洁起见,此处仅省略.)谢谢!
我试图在MSDN上重新编写一个JScript示例,以便针对某些模式验证XML.
作为第一个attmempt,我使用了示例中使用的sl-valid.xml,sl-notValid.xml和sl.xsd文件.
我的代码如下:
procedure BasicValidation(FileName: string);
var
XML: IXMLDOMDocument2;
begin
// Load XML and resolve externals
XML := ComsDOMDocument.Create;
XML.async := False;
XML.validateOnParse := True;
XML.resolveExternals := True;
XML.setProperty('SelectionLanguage', 'XPath');
XML.setProperty('SelectionNamespaces', 'xmlns:x=''urn:book''');
XML.load(FileName);
if XML.parseError.errorCode <> 0 then
ShowMessage('Error parsing. Reason: ' + XML.parseError.reason)
else
ShowMessage('XML validation OK.');
end;
Run Code Online (Sandbox Code Playgroud)
当我尝试sl-notValid.xml文件时,我仍然可以获得'XML验证'.有没有人见过这个?上述代码与JScript考试之间的根本区别是什么?http://msdn.microsoft.com/en-us/library/ms764717%28VS.85%29.aspx?
我想将对象A传递给第二个对象B,让B做一些处理,最后释放A以防不再需要它.下面给出了一个淡化版本.
program Project6;
{$APPTYPE CONSOLE}
uses
SysUtils;
type
TMyObject = class(TObject)
public
FField1: string;
FField2: string;
end;
TBigObject = class(TObject)
public
FMyObject: TMyObject;
procedure Bind(var MyObject: TMyObject);
procedure Free();
end;
procedure TBigObject.Bind(var MyObject: TMyObject);
begin
FMyObject := MyObject;
end;
procedure TBigObject.Free;
begin
FreeAndNil(FMyObject);
Destroy();
end;
var
MyObject: TMyObject;
BigObject: TBigObject;
begin
try
MyObject := TMyObject.Create();
BigObject := TBigObject.Create();
BigObject.Bind(MyObject);
BigObject.Free();
if (Assigned(MyObject)) then begin
WriteLn('Set MyObject free!');
MyObject.Free();
end;
ReadLn;
except
on E: Exception do
Writeln(E.ClassName, ': ', E.Message);
end; …Run Code Online (Sandbox Code Playgroud) delphi ×8
delphi-xe2 ×2
generics ×2
object ×2
rtti ×2
arrays ×1
delphi-2010 ×1
devise ×1
duplicates ×1
interface ×1
msxml ×1
pointers ×1
resize ×1
xml ×1