小编Col*_*lin的帖子

如何将数组传递给PHP SoapClient调用

使用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> …

php soap-client

12
推荐指数
2
解决办法
3万
查看次数

如何验证has_many关系未更改

我有一个相当典型的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)

这工作得很好,以防止 …

validation activerecord ruby-on-rails

6
推荐指数
1
解决办法
1833
查看次数

以rails形式覆盖表单字段值

注意:当我最初提出这个问题时,我是在思考问题.接受的答案对于我给出的例子是正确的 - 即你可以传递: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 …

ruby-on-rails-3

3
推荐指数
1
解决办法
1万
查看次数