使用PHP和SoapClient.
我需要将以下XML传递到SOAP请求-即多<stay>"内小号<stays>.
<reservation>
<stays>
<stay>
<start_date>2011-01-01</start_date>
<end_date>2011-01-15</end_date>
</stay>
<stay>
<start_date>2011-01-16</start_date>
<end_date>2011-01-30</end_date>
</stay>
</stays>
</reservation>
Run Code Online (Sandbox Code Playgroud)
问题是我将数据作为数组传递:
$xml = array('reservation' => array(
'stays' => array(
array(
'start_date' => '2011-01-01',
'end_date' => 2011-01-15
),
array(
'start_date' => '2011-01-16',
'end_date' => 2011-01-30
)
)
);
Run Code Online (Sandbox Code Playgroud)
以上不起作用,因为<stay>没有定义.所以替代方案是:
$xml = array('reservation' => array(
'stays' => array(
'stay' => array(
'start_date' => '2011-01-01',
'end_date' => 2011-01-15
),
'stay' => array(
'start_date' => '2011-01-01',
'end_date' => 2011-01-15
)
)
);
Run Code Online (Sandbox Code Playgroud)
但这导致重复的密钥,因此只<stay> …
我有一个相当典型的Order模型,即has_many Lines
class Order < ActiveRecord::Base
has_many :lines
validates_associated :lines
Run Code Online (Sandbox Code Playgroud)
订单完成后,不应该更改任何属性或相关行(尽管您可以将状态更改为未完成).
validate do
if completed_at.nil? == false && completed_at_was.nil? == false
errors.add(:base, "You can't change once complete")
end
end
Run Code Online (Sandbox Code Playgroud)
这样可以正常工作,但是,如果添加,删除或更改关联的行,则不会阻止此操作.
在我的Line模型中,我有以下验证:
validate do
if order && order.completed_at.nil? == false
errors.add(:base, "Cannot change once order completed.")
end
end
Run Code Online (Sandbox Code Playgroud)
这会成功停止正在修改的已完成订单中的行,并防止将行添加到已完成的订单中.
因此,我还需要防止线路从已完成的订单中取出.我在Line模型中试过这个:
validate do
if order_id_was.nil? == false
if Order.find(order_id_was).completed_at.nil? == false
errors.add(:base, "Cannot change once order completed.")
end
end
end
Run Code Online (Sandbox Code Playgroud)
这工作得很好,以防止 …
注意:当我最初提出这个问题时,我是在思考问题.接受的答案对于我给出的例子是正确的 - 即你可以传递:value给text_field,但是我实际上遇到了问题date_select,它没有覆盖值集的工具.
因此,现在已经在Rails中更新了,因此您可以进行设置:selected => a_date,并且它将按预期工作.这将在Rails 4中.
我有一个可以从父模型继承其值的模型.它的工作原理如下:
class User < ActiveRecord::Base
attr_accessible :field_name
belongs_to :company
def field_name
if self['field_name'].nil?
company['field_name']
else
self['field_name']
end
end
end
class Company < ActiveRecord::Base
attr_accessible :field_name
end
Run Code Online (Sandbox Code Playgroud)
然后,我有一个表单来编辑用户,但当然,如果用户值为零,那么它使用公司的值填充表单,这不是我想要的.
我希望能够覆盖表单字段的值,以便如果User值为nil,则该值为空.
尝试1
理想情况下,我能做到:
<%= form_for @user do |f| %>
<%= f.text_field :field_name, @user['field_name'] %>
<% end %>
Run Code Online (Sandbox Code Playgroud)
但这不起作用,似乎没有提供覆盖值的机制.
尝试2
所以我考虑创建第二个getter/setter:
def field_name_uninherited
self['field_name']
end
def field_name_uninherited=(value)
self['field_name']=value
end
Run Code Online (Sandbox Code Playgroud)
现在我可以使用<%= f.text_field :field_name_uninherited %>它并按预期工作 - 太棒了!除以下:何时field_name …