Rails 5,找不到没有ID的用户。您可以通过表单传递对象吗?

粉红色的

我正在尝试为用户编写将技能(属于用户,技术和水平)添加到其技能组的功能的代码。

我在skill / new.html.erb中有一个simple_for_for:

  <%= simple_form_for [ @user, @skill ] do |f| %>
    <p>Select Tech</p>
    <div>
      <%= f.collection_select :technology_id, @techs, :id, :name%>
    </div>
    <p>Select Level</p>
    <div>
      <%= f.collection_select :level_id, @levels, :id, :name%>
    </div>
    <%= f.submit "Submit", class: "btn btn-primary" %>
  <% end %>

Skills Controller:技能操作:将Technology和Level对象的列表传递给simple_form_for,因此用户可以选择的选项是所有Technologies和Levels的列表(例如Tech:Ruby,Level:Junior)。

class SkillsController < ApplicationController
  before_action :authenticate_user!

  def index
    @skills = policy_scope(Skill)
  end

  def new
    @techs = Technology.all
    @levels = Level.all
    @skill = Skill.new
    @user = current_user
    authorize @skill
  end

  def create
    skill = Skill.new(skill_params)
    authorize skill
    if skill.save
      redirect_to projects_path
    else
      render :action => "new", @user => params[:user_id], @skill => skill
    end
  end

  private

  def skill_params
    params.require(:skill).permit(:user_id, :technology_id, :level_id)
  end


end

我有几个问题:

在无法保存新技能后,else子句不会将@user和@skill正确发送到表单,但是我不知道语法是否正确。

实际问题:可以将与所选选项相关联的技术和级别ID而不是对象本身传递给表单吗?我尝试手动手动查找所有技能组件,如下所示,这会导致“找不到没有ID的用户”错误:

  def create
    skill = Skill.new()
    technology = Technology.find(skill_params[:technology_id])
    level = Level.find(skill_params[:level_id])
    user = User.find(skill_params[:user_id])
    skill.user = user
    skill.technology = technology
    skill.level = level
    authorize skill
    if skill.save
      redirect_to projects_path
    else
      render :action => "new", @user => user, @skill => skill
    end
  end

  private

  def skill_params
    params.require(:skill).permit(:technology_id, :level_id, :user_id)
  end
最高

首先,请确保您已建立从用户到技能的关联,可以根据以下条件建立新的记录:

class User
  has_many :skills
end

如果您的应用程序仅允许用户向自己的帐户添加技能,则应从会话中获取当前用户:

def create
  @skill = current_user.skills.new(skill_params)
  authorize @skill
  if @skill.save
    redirect_to projects_path
  else
    render :new
  end
end

请注意,这消除了完全嵌套表单和路由的需要:

resources :skills
<%= simple_form_for @skill do |f| %>
  # ...
<% end %>

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

rails rbenv:rails:找不到命令

Rails中的表单对象

Rails 5中没有令牌通过PayPal Express结帐

没有ID的Rails找不到用户

如何修复Rails'ActiveRecord :: RecordNotFound(在没有ID的情况下找不到程序)

在没有ID的情况下找不到<Model>-rails 5

Rails 4自定义控制器操作错误-“没有ID找不到'模型'”

找不到Rails路线

Rails 3-如何通过链接传递对象ID

通过Ruby On Rails中的jquery的onclick函数传递对象的ID

Rails:“找不到带有'id'=“(ActiveRecord :: RecordNotFound)的电影

找不到Rails简单表单关联

没有ID找不到[模型]:Rails 4自定义控制器操作

Rails-找不到带有'id'=的学生

Ruby on Rails“找不到带有'id'= links的客户”

没有ID,找不到“每周”(在Rails中删除)

Rails搜索表单抛出错误,找不到带有'id'= search的产品

Rails 4-找不到带有“ id”的订阅

Rails教程中的“ RecordNotFound:找不到用户”

Rails 5找不到JS文件

Rails 5 + Ajax 表在表单提交时没有动画

Rails 通过表单传递表单 ID 参数

rails 中的管理功能:错误:找不到具有“id”= 的用户

Rails 5:找不到带有友好 ID 的记录

如何通过在 rails 5 restful json api 中传递用户 authentication_token 来显示用户对象数据?

Rails 通过表单传递创建操作的参数

Rails - 找不到没有 ID 的 Variant

如何通过 Rails 中的嵌套表单传递 account_id

在 Rails 控制器中检索当前参数值 - 错误:找不到没有 ID 的问题