新连接表记录上的rails simple_form关联

当我尝试创建具有两个外键的模型UserLanguage的新记录时,我不断收到错误“ nil:NilClass的未定义方法'model_name'”。

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

user_languages#new视图

<%= 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_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

我为用户分配了current_user(设备),但是无法获得与新的user_langauge记录关联的语言。...

我什至尝试在保存对象之前从from数据中手动分配@ user_language.language_id = params [:language],但是由于未知原因,langauge_id仅被分配了0。

zhangqiangwen88 回答:新连接表记录上的rails simple_form关联

问题是您在创建方法中分配了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

这假定您已经在has_many :user_languages类中建立了User关系。

本文链接:https://www.f2er.com/3000934.html

大家都在问