【问题标题】:has_many Custom Create Actionhas_many 自定义创建操作
【发布时间】:2013-10-23 15:05:05
【问题描述】:

我想我需要用户:通过我的协会中的某个地方,但我对此很陌生,所以任何帮助将不胜感激。

为简单起见,假设我有 3 个模型。

Faults
Users
FaultComments

在哪里

Faults - belong_to :user and has_many :fault_comments
Users - has_many :faults and has_many :fault_comments
FaultComments - belongs_to :fault and belongs_to: user

我想做的是能够从故障显示页面添加故障 cmets,目前我有以下内容,但我无法让它全部正常工作。

routes.rb

devise_for :users do
 get '/users/sign_out' => 'devise/sessions#destroy'
end
resources :faults 
resources :fault_comments

views/faults/show.html.erb

<h3>Add New</h3>
<%= form_for @faultcomment, :url => fault_comments_path(:fault_id => @fault.id, :user_id => current_user.id) do |f| %>
<%= f.text_field :comment %>
<%= f.submit %>
<% end %>

控制器/faults_cmets_controller.rb

def create
 @fault = Fault.find(params[:fault_id])
 @faultcomment = @fault.fault_comments.new(params[:faultcomment])
 @faultcomment.user_id = params[:user_id]
 @faultcomment.comment = :comment
 if @faultcomment.save
  redirect_to faults_path
 end
end

【问题讨论】:

  • 您遇到了什么错误?
  • 它工作得很好,但我确信这无论如何都不是最好的方法。

标签: ruby-on-rails ruby-on-rails-3 has-many-through has-many


【解决方案1】:

首先,我认为您应该将FaultCommentsController 原样留下,可能是这样的:

def create
  @fault_comment = FaultComment.new(params[:fault_comment])
  @fault_comment.user = current_user
  if @fault_comment.save
    redirect_to faults_path
  end
end

(作为旁注,学习 CamelCase 和snake_case 以及如何在两者之间正确转换可能是值得的。FaultComment 的snake_case 推论是fault_comment,而不是faultcomment。你会如果您不理解这一点,肯定会遇到问题。)

views/faults/show.html.erb 上的表单在我看来或多或少是正确的。如果你把你的控制器改回原来的,它可以工作吗?

另外,像这样改变你的表单:

<h3>Add New</h3>
<%= form_for @fault_comment, :url => fault_comments_path do |f| %>
<%= f.text_field :comment %>
<%= f.hidden_field :fault_id, @fault.id %>
<%= f.submit %>
<% end %>

【讨论】:

  • 我已将控制器更改为建议,虽然没有原件可以将其放回... 这会填充 FaultComment 的评论字段,但不会填充 user_id 或 fault_id
  • 太好了,谢谢,我确实怀疑这可能是这样,但在我看来似乎有点太 PHP 了!
猜你喜欢
  • 2013-09-22
  • 1970-01-01
  • 1970-01-01
  • 2017-06-16
  • 1970-01-01
  • 2013-04-21
  • 2017-10-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多