【发布时间】:2017-12-01 23:45:59
【问题描述】:
好的,我是 Rails 的新手,一般来说我没有太多的编码经验,所以这可能看起来很愚蠢,但这是我的问题:
我编辑了代码,所以这里是我当前状态的更新,包括更多信息:
投票和期权模型:
class Voting < ApplicationRecord
has_many :options
validates :vote, presence: true
accepts_nested_attributes_for :options
end
class Option < ApplicationRecord
belongs_to :voting
end
routes.rb:
Rails.application.routes.draw do
resources :votings do
resources :options
end
root 'votings#new'
end
投票/new.html.erb:
<h1>create new poll</h1>
<%= form_with scope: :voting, url: votings_path, local: true do |form| %>
<p>
<%= form.label :voting %><br>
<%= form.text_area :content %>
</p>
<p>
<%= form.fields_for :option do |option| %>
<%= option.label 'Optionen' %><br>
<%= option.text_field :vote %>
<% end %>
</p>
<p>
<%= form.submit %>
</p>
<% end %>
投票/show.html.erb:
<p>
<strong>Your Voting:</strong>
<%= @voting.content %>
</p>
<ul>
<p>
<%= @options.vote %>
</p>
</ul>
votings_controller.rb:
class VotingsController < ApplicationController
def show
@voting = Voting.find(params[:id])
@options = @voting.options
end
def new
@voting = Voting.new
@voting.options.build
end
def create
@voting = Voting.new(voting_params)
@voting.save
redirect_to @voting
end
private
def voting_params
params.require(:voting).permit(:content, options_attributes: [:id, :vote])
end
end
options_controller.rb:
class OptionsController < ApplicationController
def create
@voting = Voting.find(params[:id])
@options = @voting.options.create(option_params)
redirect_to voting_path(@voting)
end
private
def option_params
params.require(:option).permit(:vote)
end
end
(我认为选项控制器中的一些代码与投票控制器相比是双倍的,我什至不确定是否需要)。
所以,我想在同一页面中创建一个带有相关选项的投票,然后在同一页面上显示投票及其选项(voting/new.html.erb 和voting/show.html.erb)。
这是我当前的错误信息:
VotingsController#create 中的 NoMethodError
#Voting:0x0000000be55208 的未定义方法“投票”
(从表单提交内容后显示。) 因此,到目前为止,new.html.erb 表单运行良好。
他似乎不知道该怎么做'投票'
<%= @options.vote %>
来自show.html.erb
我希望进一步的信息将有助于解决这个问题。
【问题讨论】:
-
“我没有正确选择”是什么意思?您看到什么错误/意外行为?日志显示什么?
-
目前是“找不到 'id'=30 的选项”,看来他不喜欢表演动作,但我不确定这是否是问题
-
您如何获得 option_id 30?可能 id 为 30 的选项已被删除
-
你说“一切都很好,只是为了创造和展示”。现在你说“他似乎不喜欢表演动作”。所以我很困惑你说的是坏了。然而,这条线:
@option = Option.find(params[:id])对我来说看起来很可疑,因为这是VotingsController;我希望params[:id]是Votingid,而不是Optionid。 -
@TomLord 是的,它可以很好地创建和显示投票,但是由于我添加了选项部分(选项属于投票)它失败了。
标签: ruby-on-rails ruby