Я пытаюсь включить Simple_forms в свое приложение, используя виртуальные атрибуты. Я следую http://railscasts.com/episodes/102-auto-complete-association-revised, чтобы получить автозаполнение, чтобы работать. Simple_form работает, когда я не использую виртуальный атрибут, но когда я использую виртуальный атрибут, я получаю сообщение об ошибке «Association: head_coach_name not found».rails simple_form с помощью виртуальных атрибутов
My Team Модель:
class Team < ActiveRecord::Base
attr_accessor :head_coach_name
belongs_to :user
validates :team_name, presence: true
belongs_to :head_coach, class_name: "User", :foreign_key => "head_coach_id"
def head_coach_name
user.try(:name)
end
def head_coach_name=(name)
self.user = User.find_by_name(name) if name.present?
end
end
Моя модель Пользователь:
class User < ActiveRecord::Base
has_many :teams, :class_name => "::Team", dependent: :destroy
end
Мой Вид:
<%= simple_form_for @team, html: {class: 'form-horizontal' }, url: teams_path, method: 'post' do |f| %>
<%= f.error_notification %>
<%= f.hidden_field :user_id %>
<div class="col-md-6">
<div class="row">
<div class="col-md-12">
<%= f.input :team_name, class: "form-control" %>
<%= f.input :year, collection: Date.today.year-90..Date.today.year %>
<%= f.input :season, as: :select, collection:
['Fall',
'Winter',
'Spring',
'Summer'] %>
<%= f.input :season_type, as: :select, collection:
['Outdoor',
'Indoor',
'Tournament'] %>
<%= f.input :awards %>
</div>
</div>
</div>
<div class="col-md-6">
<div class="row">
<div class="col-md-12">
<%= f.input :club %>
<%= f.input :division %>
<%= f.association :head_coach_name %>
<%= f.input :assistant_coach_id %>
<%= f.input :assistant_coach_two_id %>
</div>
</div>
</div>
<%= f.button :submit, label: "Add team", class: "btn btn-large btn-primary col-md-3 pull-right" %>
<% end %>
Все работает до тех пор, как я не виртуальная ассоциации там. Я мог бы поставить: head_coach, и он будет работать с выпадающим списком, но я хочу использовать функцию автозаполнения, например, в видео railscast. Кроме того, в рельсах консоли я могу запустить эти команды, чтобы показать виртуальный атрибут работы:
2.1.2 :003 > team.head_coach_name
User Load (0.6ms) SELECT `users`.* FROM `users` WHERE `users`.`id` = 100 LIMIT 1
=> "Miss Daisha Shanahan"
Любые идеи о том, как я могу получить виртуальный атрибут для корректной работы с simple_forms?
Спасибо. Это решило мой вопрос об объединении, который не найден. Я новичок в рубинах на рельсах. Не могли бы вы рассказать о странностях, о которых вы говорите? @steel – Mike
Несомненно, @Mike. Я добавил пример. Хорошее использование .try(), если вы новичок в Rails. – steel