1

Я пытаюсь пользователя Redmine через REST API для того, чтобы сохранить и обновить проекты Членство, как описано в http://www.redmine.org/projects/redmine/wiki/Rest_MembershipsRails ActiveResource :: Ошибка Base или Redmine?

Для того, чтобы сделать это, я включил в моем клиентское приложение, написанное в RoR, следующее ' redmine_project»модель:

class RedmineProject < ActiveResource::Base 
    self.site ='http://localhost:3001' 
    self.format = :json 
    self.user = 'admin' 
    self.password = 'admin' 
    self.element_name = 'project' 
    self.collection_name = 'projects' 

end 

Затем в моей консоли, я пытаюсь включить новый состав, с помощью следующей команды:

RedmineProject.find(4).post(:memberships,:user_id => 12, :role_ids => [4]) 

Первая часть воздаем правильно обработанной Экспортировать (переменный ток tually, если я просто пытаюсь RedmineProject.find (4) Я получаю JSON с моим данным проектом), но .. Я не могу разместить новый состав с

.post (: членство, : user_id => 12,: role_ids => [4])

Вот результат моей консоли приложения:

ActiveResource::ServerError: Failed. Response code = 500. Response message = Internal Server Error . 
    from /home/marc/.rvm/gems/ruby-1.9.3-p448/gems/activeresource-3.2.13/lib/active_resource/connection.rb:148:in `handle_response' 

и вот результат Redmine терминала:

Started POST "/projects/4/memberships.json?role_ids%5B%5D=4&user_id=12" for 127.0.0.1 at 2013-10-24 21:32:41 +0200 
Processing by MembersController#create as JSON 
    Parameters: {"project"=>{"created_on"=>"2013-10-23T00:58:15Z", "description"=>"azfazfazf zaf azffza", "homepage"=>"", "id"=>4, "identifier"=>"team-35", "name"=>"azfazf", "updated_on"=>"2013-10-23T00:58:15Z"}, "role_ids"=>["4"], "user_id"=>"12", "project_id"=>"4"} 
WARNING: Can't verify CSRF token authenticity 
    (0.6ms) SELECT MAX(`settings`.`updated_on`) AS max_id FROM `settings` 
    User Load (0.9ms) SELECT `users`.* FROM `users` WHERE `users`.`type` IN ('User', 'AnonymousUser') AND `users`.`login` = 'admin' 
    SQL (95.6ms) UPDATE `users` SET `last_login_on` = '2013-10-24 21:32:41' WHERE `users`.`type` IN ('User', 'AnonymousUser') AND `users`.`id` = 1 
    Current user: admin (id=1) 
    Project Load (0.4ms) SELECT `projects`.* FROM `projects` WHERE `projects`.`id` = 4 LIMIT 1 
    EnabledModule Load (0.4ms) SELECT name FROM `enabled_modules` WHERE `enabled_modules`.`project_id` = 4 
Completed 500 Internal Server Error in 127ms 

NoMethodError (undefined method `valid?' for nil:NilClass): 
    app/controllers/members_controller.rb:70:in `block (2 levels) in create' 
    app/controllers/members_controller.rb:65:in `create' 

С кодом нет в коде? или это (вряд ли) ошибка?

ответ

0

я предположить, что вы используете Redmine v2.3

Глядя на place где поднимается ошибка, я вижу, что members пустой массив! Глядя на процессе построения members я могу предположить, что params[:membership] пустые, пожалуйста, обратитесь к журналу:

{"project"=>{"created_on"=>"2013-10-23T00:58:15Z", "description"=>"azfazfazf zaf azffza", "homepage"=>"", "id"=>4, "identifier"=>"team-35", "name"=>"azfazf", "updated_on"=>"2013-10-23T00:58:15Z"}, "role_ids"=>["4"], "user_id"=>"12", "project_id"=>"4"} 

Попробуйте изменить параметры отправки, чтобы обернуть их в membership. Нечто подобное описано в document

{ 
    "membership": 
    { 
    "user_id": 27, 
    "role_ids": [ 2 ] 
    } 
} 

Я думаю, что это должно работать

.post(:memberships,:membership => {:user_id => 12, :role_ids => [4]}) 
+0

Привет, спасибо за вашу помощь @gotva, Единственное, что мне нужно, чтобы включить в PARAM : членство (без S), таким образом, мы имеем: '.POST (: членство, членство: => {: user_id => 12,: role_ids => [4]})' Спасибо большое, я не мог сделать это без тебя :) –