2014-08-28 2 views
0

Я пытаюсь создать комментарии для продукта. Как-то я не могу передать значение в текстовое поле обратно в контроллер комментариев. Комментарий создается в базе данных, но столбец тела таблицы не заполняется.не может передать значение текстового поля контроллеру в рельсах 4

модель Мой продукт выглядит следующим образом -

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

Можете ли вы разместить полную форму? В вашем коде есть много вещей – Mandeep

+0

Можете ли вы отправить 'params', которые приходят к вашему действию контроллера? вы можете найти его на сервере rails server – RAJ

+0

HI. Это параметры передаются в журнале - «comment» => {«body» => «Great Comment»}. Как я могу получить доступ к значению в контроллере? – pari

ответ

0

button_to создает форму само по себе просто размещение в URL (я признаю, я объяснил, что плохо так пойти и посмотреть на документации, связанной), так что ваш текстовое поле не фактически часть формы и, таким образом, не прошла. Вам необходимо будет использовать действительную форму

<tr> 
    <td> 
    <%= form_for [@product, Comment.new] do |f| %> 
     <%= f.text_field :body %> 
     <%= f.submit 'Add comment', :class => "buttonto" %> 
    <% end %> 
    </td> 
</tr> 
+0

HI, я получаю сообщение об ошибке, когда пытаюсь использовать form_for в частичном. Сообщение «NoMethodError in Store # prodselect». Отображение E: /demo/app/views/store/_form.html.erb, где строка # 1 поднята: undefined method 'product_comments_path 'для # <# <Класс: 0x5346f48>: 0x4d1dc98> – pari

+0

' <% = form_for [@product , Comment.new], url: create_comment_product_path do | f | %> 'Я предполагаю, глядя на ваши маршруты, если не рейк-маршруты, и посмотрите, какой путь для создания комментариев и использовать это в параметре url. –

0

Вы используете form_for или что-то в этом роде? Ваша button_to с помощью только пути не отправит информацию вашему контроллеру. Попытайтесь прочитать this.

0

Да, мой путь по маршрутам был неправильным. Также form_for помог. Спасибо, что указал мне в правильном направлении.

Смежные вопросы