【问题标题】:Rails 3-"Couldn't find [model] without an ID" problemRails 3-“找不到没有 ID 的 [model]”问题
【发布时间】:2011-08-31 18:28:16
【问题描述】:
Couldn't find Submission without an ID

最近几天这个问题一直困扰着我,我似乎无法解决它。 当我尝试在应用中创建 Emailinterest 对象时会出现此问题。

我有两个模型。

  • 提交
  • 电子邮件兴趣

每次提交可以有多个emailinterest,但emailinterest不能存在

C:\Rails\actuirl5\app\controllers\emailinterests_controller.rb

submission_id 实际上是 emailinterest 对象的成员。 submit_id 假设包含提交对象的 ID 值。

def create
    @emailinterest = Emailinterest.new(params[:emailinterest])
    @submission = Submission.find(params[:submission_id])

    respond_to do |format|
        if @emailinterest.save
            Notifier.emailinterest_notification(@emailinterest, @submission).deliver
            format.html { redirect_to(@emailinterest, :notice => 'Email was successfully sent!') }
            format.xml  { render :xml => @emailinterest, :status => :created, :location => @emailinterest }
        else
            format.html { render :action => "new" }
            format.xml  { render :xml => @emailinterest.errors, :status => :unprocessable_entity }
        end
    end
end

C:\Rails\actuirl5\app\views\submissions\show.html.erb

....

<%= render :partial=>"form_new_emailinterest", :locals=>{:emailinterest=>Emailinterest.new(:submission_id=>@submission.id)} %> 

C:\Rails\actuirl5\app\views\submissions

<%= form_for(emailinterest) do |f| %>

    <%= hidden_field :submission_id, :value => @submission.id %>

    <div class="field">
        <%= f.label :sender_email %><br />
        <%= f.text_field :sender_email %>
    </div>
    <div class="field">
        <%= f.label :sender_email_content %><br />
        <%= f.text_area :sender_email_content %>
    </div>
    <div class="actions">
        <%= f.submit %>
    </div>
<% end %>

修复

C:\Rails\actuirl5\app\controllers\emailinterests_controller.rb

def create
    @emailinterest = Emailinterest.new(params[:emailinterest])
    @submission = Submission.find(params[:submission_id])

    respond_to do |format|
        if @emailinterest.save
            Notifier.emailinterest_notification(@emailinterest, @submission).deliver
            format.html { redirect_to(@emailinterest, :notice => 'Email was successfully sent!') }
            format.xml  { render :xml => @emailinterest, :status => :created, :location => @emailinterest }
        else
            format.html { render :action => "new" }
            format.xml  { render :xml => @emailinterest.errors, :status => :unprocessable_entity }
        end
    end
end

C:\Rails\actuirl5\app\views\submissions_form_new_emailinterest.html.erb

<%= form_for(emailinterest) do |f| %>
    <%= hidden_field_tag :submission_id, value = @submission.id %>
    <div class="field">
        <%= f.label :sender_email %><br />
        <%= f.text_field :sender_email %>
    </div>
    <div class="field">
        <%= f.label :sender_email_content %><br />
        <%= f.text_area :sender_email_content %>
    </div>
    <div class="actions">
        <%= f.submit %>
    </div>
<% end %>

C:\Rails\actuirl5\app\views\submissions\show.html.erb

<%= render :partial=>"form_new_emailinterest", :locals=>{:emailinterest=>Emailinterest.new} %>

【问题讨论】:

  • 试试这个:@submission = Submission.find(params[:emailinterest][:submission_id])
  • Couldn't find Submission without an ID 仍然出现此错误。
  • 显示服务器正在接收的params。看起来submission_id 被传递给Submission.findnil
  • "显示服务器正在接收的参数。"有什么快速的方法?
  • 执行tail log/development.log 并查找请求——参数散列在每个操作之后写入。

标签: ruby-on-rails ruby ruby-on-rails-3


【解决方案1】:

考虑到您在显示操作中设置了@submission,这应该可以工作:

<%= hidden_field :submission_id, :value => emailinterest.submission_id %>

然后

@submission = Submission.find(params[:emailinterest][:submission_id])

您不能在局部变量中访问像 @submission 这样的实例变量。这就是为什么您可以选择 :locals。

【讨论】:

  • 通过 emailinterest.submission.id,你的意思是 emailinterest.submission_id? Couldn't find Submission without an ID我又遇到了这个错误。
  • 是的,你是对的 submit_id。然后检查以下内容。在渲染部分之前检查@submission.id 是否确实存在于您的节目中。如果存在,请检查您是否仍然可以通过部分中的 emailinterest.submission_id 访问它。 (只需将 放在它周围)如果仍然是这种情况,请将“puts params.inspect”放入您的控制器并检查日志。
猜你喜欢
  • 2020-05-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多