Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 找不到具有“id”的世界=_Ruby On Rails_Ruby_Ruby On Rails 5.1 - Fatal编程技术网

Ruby on rails 找不到具有“id”的世界=

Ruby on rails 找不到具有“id”的世界=,ruby-on-rails,ruby,ruby-on-rails-5.1,Ruby On Rails,Ruby,Ruby On Rails 5.1,我有一个世界父对象和一个状态子对象。我正在尝试创建一个新的State对象,rails找不到world id。我正在尝试从world show页面链接到新的State表单,url显示…/worlds/1/states/new,那么为什么这不在父id上显示呢?错误可能来自控制器@world=world.findparams[:id]中的这一行。我甚至尝试过使用params[:world_id] 为了简单起见,我只在这里发布相关代码 world.rb class World < Applicat

我有一个世界父对象和一个状态子对象。我正在尝试创建一个新的State对象,rails找不到world id。我正在尝试从world show页面链接到新的State表单,url显示…/worlds/1/states/new,那么为什么这不在父id上显示呢?错误可能来自控制器@world=world.findparams[:id]中的这一行。我甚至尝试过使用params[:world_id]

为了简单起见,我只在这里发布相关代码

world.rb

class World < ApplicationRecord
  belongs_to :user
  has_many :states
end
states/_form.html.erb

<div class="form">
  <%= form_for(state) do |f| %>
    <% if state.errors.any? %>
      <div id="error_explanation">
        <h2><%= pluralize(world.errors.count, "error") %> prohibited this state from being saved:</h2>

        <ul>
        <% state.errors.full_messages.each do |message| %>
          <li><%= message %></li>
        <% end %>
        </ul>
      </div>
    <% end %>

    <%= f.text_field :name, placeholder: 'Name' %><br />

    <fieldset>
      <legend>Basic Info</legend>
        <%= f.text_area :summary, placeholder: 'Summary About', rows: 6 %><br />
        <%= f.text_area :history, placeholder: 'History', rows: 6 %><br />
        <%= f.text_area :climate, placeholder: 'Climate', rows: 3 %><br />
        <%= f.text_area :industry, placeholder: 'Industry', rows: 3 %><br />
        <%= f.text_area :education, placeholder: 'Education', rows: 3 %><br />
        <%= f.text_area :culture, placeholder: 'Culture', rows: 3 %><br />
        <%= f.text_area :law, placeholder: 'Legal System, Crime & Punishment', rows: 3 %><br />
        <%= f.text_area :mythology, placeholder: 'Mythology', rows: 3 %><br />
    </fieldset>

    <fieldset>
      <legend>Quick Stats</legend>
        <%= f.text_field :inception, placeholder: 'Inception' %><br />
        <%= f.text_field :population, placeholder: 'Population' %><br />
        <%= f.text_field :life_expectancy, placeholder: 'Ave. Life Expectance' %><br />
        <%= f.text_field :land_mass, placeholder: 'Land Mass' %><br />
    </fieldset>

    <p><%= f.submit %></p>
  <% end %>
</div>
修改您的link_to helper以指定并告诉Rails您通过它发送的参数:

发件人:

在show.html.erb中:

<%= link_to 'New State', new_world_state_path(@world) %>
致:

然后在app/controllers/states_controller.rb中更改接收参数的方式:

def new
  @world = World.find(params[:world_id])
  @state = @world.states.build
end

def create
  @world = World.find(params[:state][:world_id])
  ...
修改您的link_to helper以指定并告诉Rails您通过它发送的参数:

发件人:

在show.html.erb中:

<%= link_to 'New State', new_world_state_path(@world) %>
致:

然后在app/controllers/states_controller.rb中更改接收参数的方式:

def new
  @world = World.find(params[:world_id])
  @state = @world.states.build
end

def create
  @world = World.find(params[:state][:world_id])
  ...

world_id在传递给:new操作时,可能不会在表单上传递回create操作

您的state_参数希望返回:world_id,因此请添加一个隐藏字段以将其发送回表单

new.html.erb

<%= f.hidden_field :world_id, :value => @world.id %>

world_id在传递给:new操作时,可能不会在表单上传递回create操作

您的state_参数希望返回:world_id,因此请添加一个隐藏字段以将其发送回表单

new.html.erb

<%= f.hidden_field :world_id, :value => @world.id %>

我没有路线匹配{:action=>new,:controller=>states,:id=>当您单击newstate链接时,您介意发布rails控制台中显示的参数吗?。我还尝试使用和。。。path@world.world_id但是这两个都是非常错误的。编辑了我的问题以包含控制台的内容。是的,参数是world_id,你应该可以从那里得到它。我没有得到ro尤特火柴{:action=>new,:controller=>states,:id=>当您单击newstate链接时,您介意发布rails控制台中显示的参数吗?。我还尝试使用和。。。path@world.world_id但是这两个都是非常错误的。编辑了我的问题以包含控制台的内容。是的,参数是world_id,你应该可以从那里得到它。这让我明白了通过新操作并最终显示表单,但在提交表单后,我遇到相同的错误。找不到具有“id”的世界=这使我通过新操作并最终显示表单,但在提交表单后,我遇到相同的错误。找不到具有“id”的世界=
<%= link_to 'New State', new_world_state_path(id: @world) %>
def new
  @world = World.find(params[:world_id])
  ...
end
<%= link_to 'New World', new_world_state_path(world_id: @world) %>
<%= link_to 'New Nation', new_world_state_path(world_id: @world_id) %> # @world_id wasn't defined
<%= link_to 'New Nation', new_world_state_path(world_id: @world.id) %>
<%= f.hidden_field :world_id, value: @world.id %>
def new
  @world = World.find(params[:world_id])
  @state = @world.states.build
end

def create
  @world = World.find(params[:state][:world_id])
  ...
<%= f.hidden_field :world_id, :value => @world.id %>
@world = World.find(params[:world_id])