Rails 5:嵌套资源undefined方法_path

时间:2017-11-15 10:45:52

标签: ruby-on-rails

我有三个表:用户,observative_sessions和观察。

在每个相应的模型中都有

users.rb的

has_many :observative_sessions, dependent: :destroy
has_many :observations, through: :observative_sessions, dependent: :destroy

observative_sessions.rb

belongs_to :user
has_many :observations, dependent: :destroy

observations.rb

belongs_to :observative_session
belongs_to :user

在routes.rb中,我在observative_sessions中嵌套观察

resources :observative_sessions do
  resources :observations
end

我显示了每个observative_session的可能观察列表,因此我创建了部分(observation / _index.html.erb)以在obender session的显示页面中呈现。

<%= render 'observations/index' %>

和创建新观察的按钮

<button type="button" class="btn btn-primary btn-sm" data-toggle="modal" data-target="#new-observation-modal">Create</button>

observative_sessions_controller.rb

def show
   @q = Observation.ransack([:observative_session])
   @observations = @s.result.order(params[:order]).paginate(page: params[:page]) if params[:q].present?
   @observations = @s.result.order(params[:order]).paginate(page: params[:page]) unless params[:q].present?
   @observation = Observation.new
end

现在我遇到了一个问题,当我尝试创建一个新的观察时,按钮调用new_modal来渲染表单

<%= render 'observations/form' %>

观测/ _form.html.erb

<%= bootstrap_form_for ([@observative_session, @observation]) do |f| %>

在这里我得到错误未定义的方法&#39; observation_path&#39; 这就是我在observation_controller.rb

中定义创建方法的方法
def create
  @observation = Observation.new(observation_params)

respond_to do |format|
  if @observation.save
    format.html { redirect_to [@observative_session, @observation], notice: 'Observation was successfully created.' }
    format.json { render :show, status: :created, location: @observation }
  else
    format.html { render :new }
    format.json { render json: @observation.errors, status: :unprocessable_entity }
  end
end

非常感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

我的错误是关于new.html.erb的错误我通过了

<%= render 'form', observation: @observation %>

而不是

<%= render 'form', observation: ([@observative_session, @observation]) %>

并在observation_controller.rb中我必须添加

    @observative_session = ObservativeSession.find(params[:observative_session_id])
    @observation = @observative_session.observations.build(observation_params)

顺便说一下,在我尝试使用思考传递会话的ID

之前
ObservativeSession.find(params[:id]) 

而应该是

ObservativeSession.find(params[:observative_session_id])