【问题标题】:Rails 4 find_or_create_by_nameRails 4 find_or_create_by_name
【发布时间】:2014-03-19 22:28:01
【问题描述】:

我在用户和大学之间建立了具有自动完成功能的一对多关联,用户可以选择大学(如果成立),否则他们创建一所新大学,但创建方法不起作用

这是我的用户模型

  def university_name
    university.try(:name)
  end

  def university_name=(name)
    self.university = University.find_or_create_by_name(name) if name.present?
  end

这是我的用户表单视图

<div class="form-group">
  <%= f.label :university_name, "Nom de l'université", class: "nom-universite" %><br />
  <%= f.text_field :university_name, data: {autocomplete_source: University.order(:name).map(&:name) }, class: "form-control form-newuniver" %>
</div> 

我在用户配置文件显示视图中也有此代码

  <p>
    <strong>Université:</strong>
       <%= @user.university_name %>
  </p>

这是我的自动完成 Jquery 代码

jQuery ->
  $('#user_university_name').autocomplete
    source: $('#user_university_name').data('autocomplete-source')

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-4 autocomplete associations


    【解决方案1】:

    使用

      def university_name=(name)
        self.university = University.find_or_create_by_name(name) if name.present?
      end
    

    使用University,即型号名称而不是university

    另外,在 Rails4 中你可以使用:

    University.find_or_create_by(name: name)
    

    为了访问上述方法:

    例如:对于用户

    @user.university_name= "Stanford"
    

    【讨论】:

    • 你是怎么调用这个方法的?它应该在用户实例上调用。例如:@user.university_name = "斯坦福"
    • 我在评论示例中有错字。修复。请参阅上面的评论。
    • 大学:

    • 您正在访问该值,即调用第一个方法(getter)而不是第二个(setter)。你需要像@user.university_name= "Stanford" 这样的东西,这将调用university_name=(name) 方法。
    • 非现在甚至自动完成功能都不起作用,如果我选择了列表中的一所大学,它不会出现在显示页面中,我不知道为什么
    【解决方案2】:

    可能是强参数问题

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-12
      • 1970-01-01
      • 2013-07-25
      • 2014-04-27
      • 2014-02-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多