无法将文本字段值传递给rails 4中的控制器

时间:2014-08-28 14:09:45

标签: ruby-on-rails ruby ruby-on-rails-4

我正在尝试为产品创建评论。不知何故,我无法将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也不成功。

先谢谢

3 个答案:

答案 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帮助。谢谢你指出了正确的方向。