REST APIによるチケット登録の際にカスタムフィールドの値がnullになってしまう

3,062 views
Skip to first unread message

num.ami...@gmail.com

unread,
Jun 24, 2013, 4:33:58 AM6/24/13
to redmine-...@googlegroups.com
初めて投稿させて頂きます。

件名の通り、APIによりチケット登録をテストしているのですが、
issue = Issue.new(
  :subject => 'REST API',
  :project_id => 'demo',
  :custom_field_values => {'3' => 'test'}
)
のようにカスタムフィールドに値を指定しているにも関わらず、作成されたチケットには
カスタムフィールドに値が入力されておらず困っております。
※custom_valuesテーブルにはレコードが作成されているものの、valueがnullとなってました。

バージョンは以下の通りです。
Redmine 2.3.1.stable
Rails 3.2.13
ruby 1.9.3

何卒ご教授の程、お願い致します。

----------
irb(main):007:0> issue = Issue.new(
irb(main):008:1*   :subject => 'REST API',
irb(main):009:1*   :project_id => 'demo',
irb(main):010:1*   :custom_field_values => {'3' => 'test'}
irb(main):011:1> )
=> #<Issue:0x2728f98 @attributes={"subject"=>"REST API", "project_id"=>"demo", "custom_field_values"=>#<Issue::CustomFieldValues:0x27279d8 @
attributes={"3"=>"test"}, @prefix_options={}, @persisted=false>}, @prefix_options={}, @persisted=false>
irb(main):012:0> issue.save
=> true
irb(main):013:0> issue
=> #<Issue:0x2728f98 @attributes={"subject"=>"REST API", "project_id"=>"demo", "custom_field_values"=>#<Issue::CustomFieldValues:0x27279d8 @
attributes={"3"=>"test"}, @prefix_options={}, @persisted=false>, "id"=>216, "project"=>#<Issue::Project:0x20ef830 @attributes={"id"=>2, "nam
e"=>"\u30C7\u30E2"}, @prefix_options={}, @persisted=false>, "tracker"=>#<Issue::Tracker:0x20ee078 @attributes={"id"=>1, "name"=>"\u30D0\u30B
0"}, @prefix_options={}, @persisted=false>, "status"=>#<Issue::Status:0x20eccb0 @attributes={"id"=>1, "name"=>"\u65B0\u898F"}, @prefix_optio
ns={}, @persisted=false>, "priority"=>#<Issue::Priority:0x20ebc00 @attributes={"id"=>2, "name"=>"\u901A\u5E38"}, @prefix_options={}, @persis
ted=false>, "author"=>#<Issue::Author:0x20e8798 @attributes={"id"=>1, "name"=>"Redmine Admin"}, @prefix_options={}, @persisted=false>, "star
t_date"=>"2013-06-24", "done_ratio"=>0, "spent_hours"=>0.0, "custom_fields"=>[#<Issue::CustomField:0x20e2780 @attributes={"id"=>3, "name"=>"
test"}, @prefix_options={}, @persisted=false>], "created_on"=>"2013-06-24T08:16:38Z", "updated_on"=>"2013-06-24T08:16:38Z"}, @prefix_options
={}, @persisted=true, @remote_errors=nil, @validation_context=nil, @errors=#<ActiveResource::Errors:0x214d100 @base=#<Issue:0x2728f98 ...>,
@messages={}>>
irb(main):014:0>

nobu_toyofuku

unread,
Jul 14, 2013, 8:46:59 AM7/14/13
to redmine-...@googlegroups.com

  豊福です。

2013年6月24日月曜日 17時33分58秒 UTC+9 num.ami...@gmail.com:
issue = Issue.new(
  :subject => 'REST API',
  :project_id => 'demo',
  :custom_field_values => {'3' => 'test'}
)
のようにカスタムフィールドに値を指定しているにも関わらず、作成されたチケットには
カスタムフィールドに値が入力されておらず困っております。

 :custom_fields => [{:id => 3, :value => 'test'}]

でうまくいくようです。
---

num.ami...@gmail.com

unread,
Jul 16, 2013, 2:52:09 AM7/16/13
to redmine-...@googlegroups.com
豊福 様

ご回答ありがとうございました。
しかしながら、ご教授頂いたとおり以下の様に実行してみましたが結果は変わりませんでした。。。


issue = Issue.new(
  :subject => 'REST API',
  :project_id => 'demo',
  :custom_field_values => {:id => 3, :value => 'test'}
)

また、json形式による登録に変更してみたところ、こちらは問題なくカスタムフィールドに値が格納されました。
とりあえず現在は何とかなっております。

ちなみに、もしよろしければ豊福様が検証された環境のバージョン情報を教えて頂くことは可能でしょうか。
Rails、もしくはActiveResourceのバージョンが要因なのかな、と根拠のない疑いを抱いている次第でして。

Redmine 2.3.1.stable
ruby 1.9.3
Rails 3.2.13
activeresource (3.2.13)

以上、よろしくお願い致します。

2013年7月14日日曜日 21時46分59秒 UTC+9 nobu_toyofuku:

nobu_toyofuku

unread,
Jul 16, 2013, 4:12:33 AM7/16/13
to redmine-...@googlegroups.com
  豊福です。

2013年7月16日火曜日 15時52分09秒 UTC+9 num.ami...@gmail.com:
しかしながら、ご教授頂いたとおり以下の様に実行してみましたが結果は変わりませんでした。。。
  ...
  :custom_field_values => {:id => 3, :value => 'test' }

 単なるハッシュではなくそれを配列で囲った

  :custom_field_values => [{:id => 3, :value => 'test'}]

ではどうでしょうか。
---

nobu_toyofuku

unread,
Jul 16, 2013, 4:15:48 AM7/16/13
to redmine-...@googlegroups.com
  豊福です。

2013年7月16日火曜日 17時12分33秒 UTC+9 nobu_toyofuku:
  :custom_field_values => [{:id => 3, :value => 'test'}]

ごめんなさい。書き間違えました。
:custom_field_values ではなく :custom_fields です。

結局最初に書いたとおり :custom_fields で配列で囲った

 :custom_fields => [{:id => 3, :value => 'test'}]

でどうでしょうか。
---

num.ami...@gmail.com

unread,
Jul 16, 2013, 8:35:49 PM7/16/13
to redmine-...@googlegroups.com
豊福 様

実はご記載頂いた記述も試してみたりはしておりました。

念のため再度、
 :custom_fields => [{:id => 3, :value => 'test'}]
として試してみましたが、結果は変わりませんでした。 

豊福様の環境では問題なく登録できておりますでしょうか?


2013年7月16日火曜日 17時15分48秒 UTC+9 nobu_toyofuku:

nobu_toyofuku

unread,
Jul 16, 2013, 10:07:31 PM7/16/13
to redmine-...@googlegroups.com
  豊福です。

2013年7月17日水曜日 9時35分49秒 UTC+9 num.ami...@gmail.com:
念のため再度、
 :custom_fields => [{:id => 3, :value => 'test'}]
として試してみましたが、結果は変わりませんでした。 

うーーん、そうですか。私の環境ではうまくいったのですが。
log/production.log には何かエラーメッセージか手掛かりになりそうな情報は記録されていませんか。

ちなみに試した環境は

  Redmine version                2.3.2.stable
  Ruby version                   1.9.3-p327 (2012-11-10) [x86_64-linux]
  Rails version                  3.2.13

試したプログラムは

require 'rubygems'
require 'active_resource'

class Issue < ActiveResource::Base
self.site = 'http://...'
self.format = :xml
self.user = 'admin'
self.password = パスワード
end

issue = Issue.new(
:subject => 'api test',
:project_id => 1,
:custom_fields => [{:id => 1, :value => 'custom1 value'}]
)
if issue.save
puts issue.id
else
puts issue.errors.full_messages
end

です。
---



num.ami...@gmail.com

unread,
Jul 18, 2013, 8:19:53 PM7/18/13
to redmine-...@googlegroups.com
豊福 様

お世話になっております。
私の書いたコードには以下の赤字(太字)の行がありませんでしたので、
追加して実施してみたところ問題なくカスタムフィールドへ値が格納されました!

型を指定してやる必要があったということですかね。

class Issue < ActiveResource::Base
self.site = 'http://...'
self.format = :xml
self.user = 'admin'
self.password = パスワード
end

大変助かりました。
ありがとうございました。

2013年7月17日水曜日 11時07分31秒 UTC+9 nobu_toyofuku:

nobu_toyofuku

unread,
Jul 23, 2013, 12:27:47 AM7/23/13
to redmine-...@googlegroups.com
  豊福です。

2013年7月19日金曜日 9時19分53秒 UTC+9 num.ami...@gmail.com:
型を指定してやる必要があったということですかね。
  ...
self.format = :xml
 
format を指定しないとデフォルトで :json になるんですね。
このメーリングリストで :xml を指定している例を見て REST API の使い方を
覚えたので :xml を指定するもんだと思い込んでいました。
format の違いによってうまくいったりいかなかったりするのは困ったもんですね。
---

Reply all
Reply to author
Forward
0 new messages