Rails如何将id传递给自定义控制器

时间:2017-02-21 09:43:15

标签: ruby-on-rails

enter image description here我是rails的新手,试图弄清楚如何将id从视图传递到控制器。我在下面创建了routes.rb文件我不想要资源,只是为了更好地理解如何传递参数

Rails.application.routes.draw do
  get 'sites/edit/:id', to: 'sites#edit'

  get 'sites/main'

  devise_for :users
  root 'sites#main'

  # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html
end

下面是我的控制器

class SitesController < ApplicationController

  def main
    @site = Site.all
  end

  def edit
    @site = Site.find(params[:id])
  end

  private

  def site_params
    params.require(:site).permit(:title, :subtitle,:name)
  end
end

我的网站控制器有两个视图。在main.html.erb

<h1>Sites#main</h1>
<p><%= current_user.email %> user is signned in </p>

<%= @site.each do |temp| %>
  <p><%= temp.name %></p>
  <p></p>
  <p></p>

  <%= link_to "Edit Site", sites_edit_path(@temp) %>
<% end %>

我无法将其链接到正确的控制器。

2 个答案:

答案 0 :(得分:0)

您需要替换

<%= link_to "Edit Site", sites_edit_path(@temp) %>

<%= link_to "Edit Site", sites_edit_path(temp) %>

您的变量temp不是@temp

此外,由于sarcastic建议您需要将路线条目更改为

get 'sites/edit/:id', to: 'sites#edit', as: :sites_edit

答案 1 :(得分:0)

首先:你的编辑路线不应该是

get 'sites/edit/:id', to: 'sites#edit'

相反它应该是get 'sites/:id/edit' => 'sites#edit'

第二:你的方法链接不应该是

<%= link_to "Edit Site", sites_edit_path(@temp) %>

而应该是<%= link_to "Edit Site", sites_edit_path(temp) %>

您可以通过 rake路线来了解您的路线,或者如果您想要浏览器视图

  

http://localhost:3000/rails/info/routes