【问题标题】:rails simple_form association on new join table record新连接表记录上的 rails simple_form 关联
【发布时间】:2019-11-30 22:26:34
【问题描述】:

当我尝试创建具有两个外键的模型 UserLanguage 的新记录时,我不断收到错误“undefined method `model_name' for nil:NilClass”:语言和用户。

表单提交后,新的 UserLangauge 对象的 language_id 为 nil。

user_languages#新视图

<%= simple_form_for(@user_language) do |f| %>
  <%= f.association :language, label_method: :name, value_method: :id, include_blank: false, include_hidden: false %>
  <%= f.input :proficiency, collection: @proficiencies, include_blank: false, include_hidden: false %>
  <%= f.submit "Add Language"%>
<% end %>

user_languages 控制器

def new
    @user_language = UserLanguage.new

    ...

end

def create
    user_language = UserLanguage.new(user_language_params)
    user_language.user = current_user

    if user_language.save
      redirect_to my_account_path
    else
      render :new
    end
  end

private

  def user_language_params
    params.require(:user_language).permit(:language, :proficiency, :seeking, :sharing)
  end

我为 user 分配了 current_user(设计),但无法获得与新 user_langauge 记录相关联的语言....

我什至尝试在保存对象之前从源数据手动分配@user_language.language_id = params[:language],但随后由于未知原因将langauge_id分配为0。

【问题讨论】:

    标签: ruby-on-rails associations simple-form


    【解决方案1】:

    问题是您在创建方法中分配了user_language = ...。这将分配一个局部变量而不是实例变量。局部变量仅在该词法范围内可用(在本例中为 create 方法),而 Rails 将控制器实例变量公开给视图。

    您可以将此方法重写为:

    def create
      @user_language = current_user.user_languages
                                   .new(user_language_params)
      if @user_language.save
        redirect_to my_account_path
      else
        render :new
      end
    end
    

    这假设您在 User 类中设置了 has_many :user_languages 关系。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多