0

Positionフィールドstarted_atとを持つモデルがありended_at、どちらもdatetimeフィールドです。両方の日付部分が同じである必要があるため、datetime_selectフォーム フィールドは for ですが、 forstarted_atしかありません。メソッドでは、次のように日付の値を割り当てたいと思います:time_select ignore_date: trueended_atcreatestarted_atended_at

params[:position]["ended_at(1i)"] = params[:position]["started_at(1i)"]
params[:position]["ended_at(2i)"] = params[:position]["started_at(2i)"]
params[:position]["ended_at(3i)"] = params[:position]["started_at(3i)"]

しかし、これはコントローラーの仕様を壊しました。値を直接割り当てるためです。

describe "POST create" do
  describe "with valid params" do
    it "creates a new Position" do
      expect {
        post :create, {:position => valid_attributes}, valid_session
      }.to change(Position, :count).by(1)
    end
  end
end

だから私はこれで終わったが、それが合理的な修正であるかどうかはわからない:

if params[:position]["ended_at(1i)"].nil? and not params[:position]["started_at(1i)"].nil? # We have to check this because in the controller specs we assign the params directly (not in this crazy xxx_at(yi) form for dates), so by checking this we know that the data was sent through the form
  params[:position]["ended_at(1i)"] = params[:position]["started_at(1i)"]
  params[:position]["ended_at(2i)"] = params[:position]["started_at(2i)"]
  params[:position]["ended_at(3i)"] = params[:position]["started_at(3i)"]
end

たぶん、より良い解決策がありますか?ご意見ありがとうございます。

4

3 に答える 3

1

コントローラーが特定の形式の属性を想定している場合、仕様はその形式でそれらを提供する必要があります。valid_attributesフォームと同じように日付要素と時刻要素を分離するように調整すると、仕様が合格するはずです。

于 2012-08-13T18:34:33.163 に答える
0

終了日/時間の日付と時間に別々の列を用意する方が簡単ではないでしょうか?

次に、次のようなものがあります。

models/position.rb

before_create :set_end_date

def set_end_date
  self[:end_date] = self[:started_at].to_date
end

スペック/コントローラー/position_controller_spec.rb

describe "POST Create" do
  describe "with valid attr" do
     it "should create a new Position" do
       lambda do
         post :create, position: valid_attributes, valid_session
       end.should change(Position, :count).by(1)
     end
  end
end
于 2012-08-14T07:23:39.443 に答える
0

あなたはチェックすることができますRails.env.test?

于 2012-08-22T11:01:28.567 に答える