2

Я пытаюсь включить 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?

ответ

0

Вы ссылаетесь на ассоциацию, которая не существует с f.association :head_coach_name. Попробуйте вместо этого:

f.association :head_coach, label_method: :head_coach_name 

У вас есть несколько других странностей в вашем коде, включая ваше head_coach_name определение, которое должно опираться на head_coach вместо пользователя. То же самое касается метода head_coach_name=.

Пример. У вас есть:

def head_coach_name 
    user.try(:name) 
end 

Похоже, вы должны иметь:

def head_coach_name 
    head_coach.try(:name) 
end 
+0

Спасибо. Это решило мой вопрос об объединении, который не найден. Я новичок в рубинах на рельсах. Не могли бы вы рассказать о странностях, о которых вы говорите? @steel – Mike

+0

Несомненно, @Mike. Я добавил пример. Хорошее использование .try(), если вы новичок в Rails. – steel

Смежные вопросы