Руби: Проблемы с использованием Mechanize для доступа к моей форме!

Ради интереса я написал очень маленький блог о рельсах (просто привет, мир). Теперь я хочу создать пост с помощью mechanize. Итак, я создал Ruby Prog и начал программировать.

Вот моя проблема: Rails создает мой элемент формы, включая все входные данные. В HTML мои входы выглядят так:

<input type="text" size="30" name="post[title]" id="post_title">

or

<textarea rows="20" name="post[description]" id="post_description" cols="40"></textarea>

Ну... Вот моя Ruby Prog, использующая Mechanize:

require 'rubygems'
require 'mechanize'

agent = WWW::Mechanize.new

page = agent.get('http://localhost:3000/posts/new')
target_form = page.form_with(:class => 'new_post')
target_form.post[title] = "test"
target_form.post[description] = "test"
page = agent.submit(target_form)
puts "end"

Я знаю, где моя ошибка, но я не знаю, как ее исправить. При target_form.post[title] = "test" происходит сбой, причина

undefined method `name' for nil:NilClass (NoMethodError)

Я думаю (пожалуйста, поправьте меня), это из-за имени ввода, потому что это пост [название], а не только пост, верно? Как я могу это исправить?


person Newbie    schedule 11.03.2010    source источник
comment
Вероятно, ваш target_form равен nil, поэтому page.form_with(:class => 'new_post') возвращает nil.   -  person klew    schedule 11.03.2010


Ответы (1)


Как насчет

target_form.field_with(:name => "post[title]").value = "test"
target_form.field_with(:name => "post[description]").value = "test"
person anshul    schedule 11.03.2010
comment
Когда я пробую ваш код, он говорит мне: неопределенный метод `field_with' для nil:NilClass (NoMethodError) Есть идеи? - person Newbie; 11.03.2010
comment
В этом случае target_form = page.form_with(:class => 'new_post') не работает. - person anshul; 11.03.2010
comment
О, хорошо, ты прав. Я забыл включить свой прокси. Так что я сделал это. Теперь я получаю другую ошибку: ...mechanize.rb:553:in `fetch_page': 503 =› Net::HTTPServiceUnreachable (WWW::Mechanize::ResponseCodeError) Кажется, что механик не может получить доступ к моей странице, верно? Есть идеи, почему? Кажется, это причина localhost. Использование другого домена, такого как google.com или что-то в этом роде, будет работать. - person Newbie; 11.03.2010
comment
Может быть несколько вещей, но первое, что я бы проверил, это тайм-аут. Попробуйте увеличить время ожидания механизации. - person anshul; 11.03.2010