#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. Какой был бы подходящий способ сделать это? Я не уверен, как это сделать, большое тебе спасибо, приятель, я думаю, мы так близки