我正在尝试为产品创建评论。不知何故,我无法将text_field中的值传递回注释控制器。注释在数据库中创建,但不填充表的主体列。
我的产品型号如下所示 -
class Product < ActiveRecord::Base
has_many :comments
accepts_nested_attributes_for :comments
end
我的评论模型看起来像这样 -
class Comment < ActiveRecord::Base
belongs_to :product
end
我的评论控制器外观如下 -
class CommentsController < ApplicationController
def create
@product = Product.find(params[:product_id])
@comment = @product.comments.build(body: params[:comment_body])
@comment.user_id = session[:user_id]
@comment.product_id = params[:product_id]
if @comment.save
redirect_to selection_path(params[:product_id])
else
redirect_to selection_path(params[:product_id]), notice: "Please include a plain text comment only"
end
end
private
def comment_params
params.require(:comment).permit(comments_attributes: [ :body,:product_id ])
end
end
路线如下 -
get "store/prodselect/:id" => 'store#prodselect', as: :selection
resources :products do
get :who_bought, on: :member
post "comments/create" => 'comments#create', as: :create_comment
end
我可以使用以下代码在prodselect.html.erb中显示评论 -
<% @comments.each do |comment| %>
<tr>
<td class="tbody" style="width:150px;"><%= comment.uname %>
<%= image_tag @product.user.pic.url(:thumb), :width=>50, :height=>50 %>
</td>
<td class="tbody" style="width:350px;"><%= comment.body %></td>
</tr>
<% end %>
这是我无法将text_field值传递回注释控制器的地方。以下代码和上面的代码位于prodselect.html.erb中。此外,prodselect是商店控制器中的一种方法 -
<tr><td>
<%= text_field :comment, :body%>
<%= button_to 'Add comment' , product_create_comment_path(@product.id), :class => "buttonto" %>
</td></tr>
最后,我在商店控制器中的prodselect方法看起来像这样 -
def prodselect
@product = Product.find(params[:id])
@comments = Comment.where(product_id: params[:id])
@comment = Comment.new
end
我是ror的新手,所以任何指针都会受到赞赏。我想知道为什么我无法将我的文本字段值传递给我的注释控制器。我尝试过使用text_area也不成功。
先谢谢
答案 0 :(得分:0)
button_to创建一个表单本身只是发布到网址(我承认我解释得很差,所以去查看链接的文档),所以你的文本字段实际上并不是形式,因此没有通过。您需要使用实际表格
<tr>
<td>
<%= form_for [@product, Comment.new] do |f| %>
<%= f.text_field :body %>
<%= f.submit 'Add comment', :class => "buttonto" %>
<% end %>
</td>
</tr>
答案 1 :(得分:0)
您使用的是form_for还是其他类似的东西?只有路径的button_to不会将信息发送给您的控制器。请尝试阅读this。
答案 2 :(得分:0)
是的,我的路线路径不正确。 form_for帮助。谢谢你指出了正确的方向。