【问题标题】:Creating a Model in Rails within the controller of a different Model在不同模型的控制器中在 Rails 中创建模型
【发布时间】:2015-11-29 16:30:13
【问题描述】:

我正在尝试在 Rails 应用程序中实现报价保存功能。我有一个 has_many :quotes 的用户模型和一个属于_to :user 的报价模型。现在我有一个单独的书籍模型,它将成为这些报价的来源。

在 Book 的 show.html.erb 文件中,我有一个表单来保存当前用户的引号

<%= form_for (@new_quote) do |f| %>
<div class="field">
    <%= f.hidden_field :book_id, :value => @new_comment.book_id %>
    <%= f.text_field :body %>
</div>
<div class="actions">
    <%= f.submit %>
</div>
<% end %>

在 Book 控制器中,我有

def show
    @new_quote = current_user.quotes.create(book_id: params[:id])
end

报价保存得很好,但问题是,由于我在 show 方法中有这个 Quote 创建语句,每次我转到我的 Book 模型的 show.html.erb 页面时,它都会创建一个空正文的 Quote。

我能做些什么来解决这个问题?我在想它可能会涉及将这个 Quote 创建移动到 Quote 控制器的实际创建方法,但我不知道如何准确地传递参数。

【问题讨论】:

    标签: ruby-on-rails ruby devise rails-activerecord


    【解决方案1】:

    您可以只build 该报价,但不能将其保存到数据库中。然后用户需要发送表单来保存该记录。只需将您的 show 方法更改为:

    def show
      @new_quote = current_user.quotes.build(book_id: params[:id])
    end
    

    【讨论】:

    • 嗯我试过了,它似乎保存了除了 current_user 的 id 之外的所有内容。所以当我查看 current_user.quotes 时,新的报价没有出现。
    • 没关系,我发现我只需要将另一个隐藏字段添加到传入 current_user id 的表单中。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-22
    • 1970-01-01
    • 2018-06-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多