You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

simple_form_for无法传递company ID,关联模型创建报错求助

Troubleshooting the ActiveRecord::RecordNotFound in User::CompanyIntroductionsController#create

Hey Brian, sorry to hear you’re stuck on this association issue—let’s break down the most common causes and fix this step by step. This error almost always boils down to missing or incorrect user_id data making its way to your create action, so let’s start there.

1. Check Your Route Configuration

First, confirm your routes are properly nested to pass the user_id parameter. Run rails routes in your terminal and look for the create route for company_introductions—it should look something like this:

user_company_introductions POST   /users/:user_id/company_introductions(.:format) user/company_introductions#create

If the route doesn’t include :user_id, your routes.rb is missing the nested structure. Fix it like this:

# config/routes.rb
resources :users do
  resources :company_introductions, module: :user
end

Or if you’re using a namespace:

namespace :user do
  resources :company_introductions, only: [:new, :create]
end
# Note: If using a namespace alone, you’ll need to manually pass the user_id in your form

2. Ensure Your Form Passes the User ID

Your simple_form_for needs to reference the user-company_introduction association to auto-include the user_id in the form’s action URL. If you’re rendering the form in a partial, make sure you’re passing the user object correctly.

Example Correct Form Code:

If you’re rendering the partial with locals:

# In your view that triggers the modal
<%= render partial: 'company_introductions/form', locals: { user: @current_user, company_introduction: CompanyIntroduction.new } %>

Then in the partial:

# app/views/user/company_introductions/_form.html.erb
<%= simple_form_for [user, company_introduction], remote: true do |f| %>
  <%# Your form fields here %>
  <%= f.input :content %>
  <%= f.input :company_name %>
  <%= f.button :submit, "Save Introduction" %>
<% end %>

Using [user, company_introduction] tells Rails to build the nested route URL, which includes the user_id when the form submits.

3. Verify Your Create Action Logic

In your User::CompanyIntroductionsController, make sure you’re fetching the user using the user_id from params. If params[:user_id] is missing, User.find will throw the RecordNotFound error.

Correct Create Action:

# app/controllers/user/company_introductions_controller.rb
class User::CompanyIntroductionsController < ApplicationController
  def create
    # Fetch the user using the params from the nested route
    @user = User.find(params[:user_id])
    # Build the introduction through the user association (auto-sets user_id)
    @company_introduction = @user.company_introductions.build(company_introduction_params)

    if @company_introduction.save
      # Success logic (e.g., close modal, refresh list)
      respond_to do |format|
        format.turbo_stream
        format.html { redirect_to user_path(@user), notice: "Introduction saved!" }
      end
    else
      # Failure logic (re-render form with errors)
      respond_to do |format|
        format.turbo_stream { render turbo_stream: turbo_stream.replace("modal_form", partial: "form", locals: { user: @user, company_introduction: @company_introduction }) }
        format.html { render :new }
      end
    end
  end

  private

  def company_introduction_params
    # Note: Don't include user_id here—we set it via the association
    params.require(:company_introduction).permit(:content, :company_name)
  end
end

4. Check for AJAX/Modal Loading Issues

If your modal loads the form via AJAX, make sure the request that fetches the partial includes the user_id. For example, if you’re using Turbo frames:

<%= turbo_frame_tag "modal_form" do %>
  <%= link_to "Add Introduction", new_user_company_introduction_path(@user), data: { turbo_frame: "modal_form" } %>
<% end %>

This ensures the new action (which renders the form) has access to the user, and the form is built with the correct association.

Quick Debug Tip

Add a puts params.inspect at the top of your create action and check your server logs when you submit the form. Look for the presence of params[:user_id]—if it’s missing, that’s the root cause.


内容的提问来源于stack exchange,提问作者Brian O Halloran

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 08:09:08