@Micheal
Немного переработанная версия вашего кода:
catch (Exception ex)
{
Type exType = ex.GetType();
if (exType == typeof(System.FormatException) ||
exType == typeof(System.OverflowException)
{
WebId = Guid.Empty;
} else {
throw;
}
}
Сравнение строк уродливо и медленно.
Из docs :
Пример использования (выбор связанного автора
для экземпляра сообщения
, ] @post
):
collection_select(:post, :author_id, Author.all, :id, :name_with_initial)
Если @ post.author_id
уже равен 1, это вернет:
<select name="post[author_id]">
<option value="">Please select</option>
<option value="1" selected="selected">D. Heinemeier Hansson</option>
<option value="2">D. Thomas</option>
<option value="3">M. Clark</option>
</select>
Итак, вам просто нужно убедиться, что @ my_object.my_method
возвращает значение, соответствующее одному из доступных значений параметра. Если есть совпадение, будет выбран этот вариант.
Согласно docs , если @ my_object.my_method
имеет то же значение, что и одна из опций, она будет выбрана по умолчанию.
И наоборот, вы можете попробовать использовать options_from_collection_for_select
в сочетании с select_tag
:
<%= select_tag 'my_object[my_method]', options_from_collection_for_select(@my_collection, :id, :description_string, @my_collection_object.id) %>
Проверить, возвращает ли @ my_object.my_method ноль. Если это так,
Если вызывающий метод возвращает nil, выбор не производится без включения: prompt или: include_blank в хэш опций.
Кроме этого, вы можете попробовать использовать лямбда, как в примере с rdoc
{:disabled => lambda {|category| category.archived? }
В вашем случае это будет выглядеть так:
{:selected => lambda {|obj| obj.id == @my_collection_object.id }}
Используйте : selected_value
%= collection_select(:my_object, :my_method, @my_collection, :id, :description_string, {}, {:selected_value => @my_collection_object.id}) %>