ruby-on-rails - Rails 3 -"Couldn' t find [model] without an ID”问题

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

Couldn't find Submission without an ID

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

我有两个模型。

  • 提交
  • 电子邮件兴趣

对于每一个提交,可以有多个emailinterest,但是emailinterest不能存在

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

submission_id 实际上是 emailinterest 对象的一个​​成员。 submission_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} %>

最佳答案

考虑到您在表演 Action 中设置了@submission,这应该可行:

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

然后

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

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

关于ruby-on-rails - Rails 3 -"Couldn' t find [model] without an ID”问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7261636/

相关文章:

ruby-on-rails - 如何让 TextMate 默认使用 Ruby on Rails?

ruby-on-rails - Ruby on Rails 部分

ruby - 使用 VCR/WebMock 时如何允许 Web 请求?

ruby - 为什么我可以将子数组传递给 `Array#each` ?

ruby-on-rails - 如何将 Bootstrap 的图标添加到 rails3 中的 button_to

ruby-on-rails - Rails 无限循环 - 堆栈级别太深

ruby-on-rails - 在 Ruby on Rails 中生成 PDF 和 Microsoft Word 文件

ruby-on-rails - 返回今天和昨天在 ruby​​ on rails 中完成的表列

jquery - 在 Rails 3 上安装 jQuery

ruby-on-rails - 插件实现 : How to call a method on an ActiveRecord?