我在rails上遇到NoMethodError,不确定如何通过其他模型访问模型

时间:2014-07-11 16:19:25

标签: ruby-on-rails nomethoderror

我在轨道上写游戏,并试图让用户创建他们的矿(它的采矿游戏)。 我有一个供用户使用的表和一个地雷表。 每个用户都有一个参考。他们的入口上的ID,指向他们在矿井表中的矿井ID。

当我尝试访问/ users / 1 / mines / new时出现错误。

  

未定义的方法`mines_path'

我无法弄清楚原因。

新形式:

<%= form_for [@mine] do |f| %>
    <%= f.label :name %>
    <%= f.text_field :name %><br>

    <p>Depth: <%= @mine.depth %></p>

    <%= f.submit "Submit", id: "submit" %>
<% end %>

控制器:

def new
 @user = User.find(params[:user_id])
 @mine = @user.mines.new
end

def create
 @mine = @user.mines.create(mine_params)
 if @mine.save
  redirect_to users_mines_path
 else
  render new_mines_path
 end
end

路线:

root 'welcome#index'
resources :sessions, only: [:create]
resources :users do
  resources :mines
end
resources :tools, only: [:create]

如何通过用户创建新的矿山?我在控制器中正确执行此操作吗? 谢谢!

2 个答案:

答案 0 :(得分:0)

  1. @user.mines.create将创建我的。因此,请使用@user.mines.new
  2. 我的索引路线指数为user_mines_path
  3. 我的演出路线名为user_mine_path(@mine)
  4. 新矿的命名路线为new_user_mine_path
  5. 位指示:

    def create
      @mine = @user.mines.new(mine_params)
      if @mine.save
         redirect_to user_mines_path
      else
         render new_user_mine_path
      end
    end
    

答案 1 :(得分:0)

在您的路线中,您的地雷嵌套在用户中,因此您需要将表单更改为以下内容:

<%= form_for [@user,@mine] do |f| %>
  <%= f.label :name %>
  <%= f.text_field :name %><br>

  <p>Depth: <%= @mine.depth %></p>

  <%= f.submit "Submit", id: "submit" %>
<% end %>

您可以使用路径指定url选项:

<%= form_for @mine, url: user_mines_path(@user)  do |f| %>
  <%= f.label :name %>
  <%= f.text_field :name %><br>

  <p>Depth: <%= @mine.depth %></p>

  <%= f.submit "Submit", id: "submit" %>
<% end %>

有关表格的详情,请参阅Form Helpers

同样在你的控制器中指出@Vimsha你需要使用.new而不是.create,因为create会初始化并保存你的我的。

def create
  @mine = @user.mines.new(mine_params)
  if @mine.save
    redirect_to user_mines_path
  else
    render new_user_mine_path
  end
end