Выполнение вычитания в моем приложении Rails с пользовательским вводом

#ruby-on-rails #ruby-on-rails-4 #math

#ruby-on-rails #ruby-on-rails-4 #математика

Вопрос:

Я только начинаю изучать Rails, поэтому, пожалуйста, простите за глупый вопрос. В моем веб-приложении я смог настроить рабочие модели, формы и представление. Пользователь может ввести свой десятичный ответ, и он отлично отображается на веб-странице. Однако я хочу вычесть один пользовательский ввод из другого пользовательского ввода. Итак, если пользователь вводит 100 в одной модели «post.price» и 10 в другой модели ввода «ratings1.content»>, я хочу, чтобы в «fprice.content3» отображалось 90. Любая помощь, которую вы, ребята, можете мне оказать, была бы настолько замечательной, я чувствую, что проблема может быть в моем контроллере для fprice. Я перечислил ниже весь свой соответствующий код. Еще раз спасибо 🙂

_form.html «post.price»

 <%= simple_form_for @post do |f| %>
  <%= f.input :title %>
  <%= f.input :image %>
  <%= f.input :price %>
  <%= f.button :submit %>
<% end %>
  

_form.html «ratings1s.content»

 <%= simple_form_for ([@post, @post.ratings1s.build]) do |f| %>
  <%= f.input_field :content %>
<% end %>
  

_form.html «fprice.content3»

 <%= simple_form_for ([@post, @post.fprices.build]) do |f| %>
  <%= f.input_field :content3 %>
<% end %>
  

Rails Controller «fprices»

 class FpricesController < ApplicationController
before_action :authenticate_user!
  def create
@post = Post.find(params[:post_id])
@fprice = Fprice.create(params[:fprice].permit(:content3))
@fprice.content3 === @post.price - @ratings1.content
@fprice.user_id = current_user.id
@fprice.post_id = @post.id

if @fprice.save
  redirect_to post_path(@post)
else
  render 'new'
end
  end
end
  

Rails Controller «ratings1s»

 class Ratings1sController < ApplicationController
before_action :authenticate_user!
  def create
@post = Post.find(params[:post_id])
@ratings1 = Ratings1.create(params[:ratings1].permit(:content))
@ratings1.content *= 10
@ratings1.user_id = current_user.id
@ratings1.post_id = @post.id

if @ratings1.save
  redirect_to post_path(@post)
else
  render 'new'
end
  end
end
  

Ответ №1:

Похоже, что ни в какой момент времени вы не определяете каждый @ratings1 объект, затем вы вызываете для него content метод, в то время как значение @ratings1 равно нулю, и это вызывает ошибку. Возможно, что-то подобное должно помочь:

 class FpricesController < ApplicationController
before_action :authenticate_user!
  def create
@post = Post.find(params[:post_id])
@fprice = Fprice.create(params[:fprice].permit(:content3))
@ratings1 = @post.ratings1s.last
@fprice.content3 = @post.price - @ratings1.content
@fprice.user_id = current_user.id
@fprice.post_id = @post.id

if @fprice.save
  redirect_to post_path(@post)
else
  render 'new'
end
  end
end
  

Я думаю, что эта строка также является проблемой

 @fprice.content3 === @post.price - @ratings1.content
  

=== это оператор равенства, поэтому я не знаю, зачем вам его там заменять на this

 @fprice.content3 = @post.price - @ratings1.content
  

Комментарии:

1. Спасибо, приятель, но я получаю сообщение об ошибке «неопределенный метод `content’ для nil: NilClass» может ли это быть из-за того, что у меня в моем _form.html для f.price — <%= f.input_field:content3%>?

2. вы никогда не определяете @ratings1 в действии контроллера

3. это потому, что у него есть свой собственный отдельный контроллер. Нужно ли мне все еще указывать это в «контроллере fprice». Если да, то было бы так @ratings1 =Ratings1s. Я задал свой контроллер ratings1 вопросом, поможет ли это, еще раз спасибо, приятель

4. Да, я не думаю, что это имеет значение, вы не можете вызвать @ratings1 в FpricesController , не определив его сначала

5. Какой был бы подходящий способ сделать это? Я не уверен, как это сделать, большое тебе спасибо, приятель, я думаю, мы так близки