我想创建" Farm"通过users_controller实例化

时间:2015-04-21 13:51:53

标签: ruby-on-rails

我有一张表格来创建新的"农场"在views / users / show.html.erb中(因为农场没有自己的观点):

<div id="add">
  <%= form_for(:farm, :url => {:action => :create}) do |f| %>
    <%= f.label :name %><br />
    <%= f.text_field :name %>
    <%= f.label :region %><br />
    <%= f.text_field :region %>
    <%= f.label :north %><br />
    <%= f.text_field :north %>
    <%= f.label :east %><br />
    <%= f.text_field :east %>
    <%= f.label :description %><br />
    <%= f.text_area :description, rows: "6" %><br />
    <%= f.label :categories %><br />
    <%= f.text_area :categories, rows: "1" %><br />
    <%= f.label :products %><br />
    <%= f.text_area :products, rows: "2" %><br />
    <%= f.submit "Vstavi" %>
  <% end %>
</div>

farms_controller发出创建操作:

class FarmsController < ApplicationController
  before_filter :authenticate

  def create
    @farm = current_user.farms.build(params[:farm])
    if @farm.save
      flash[:success] = "Farm created!"
      redirect_to 'users/show'
    else
      render 'users/show'
    end
  end
end

当然,当我尝试在视图中创建一个新的农场时:

缺少模板

缺少模板用户/创建{{handlers =&gt; [:erb,:rjs,:builder,:rhtml,:rxml],:formats =&gt; [:html],:locale =&gt; [:en,:en]}在视图路径&#34; / media / rok / LOCAL DISC / Users / Koko / Documents / KMETIJE / kmetije / app / views&#34;

然后我也将create动作添加到users_controller,但我显然做错了:

class UsersController < ApplicationController

  def show
    @user = User.find(params[:id])
    @farms = @user.farms.paginate(:page => params[:page])
  end

  def new
    @user = User.new
  end

  def create
    Farm.create
    redirect_to :action => :show
  end
end

我应该也可以显示我的路线文件:

Kmetije::Application.routes.draw do |map|
  resources :users
  resources :sessions, :only => [:new, :create, :destroy]
  resources :farms, :only => [:create, :destroy]

  root :to => 'pages#home'

  match '/home', :to => 'pages#home', as: 'home'
  match '/info', :to => 'pages#info', as: 'info'
  match '/signin', :to => 'sessions#new', as: 'signin'
  match '/users/1', :to => 'users#show', as: 'user'
  match '/signout', :to => 'pages#home', as: 'signout'
end

感谢您的时间。

1 个答案:

答案 0 :(得分:0)

这是为了提交给users / create,因为你没有指定一个控制器,只是一个动作。

<%= form_for(:farm, :url => {:action => :create}) do |f| %>

由于您在呈现此页面时处于用户控制器操作中,因此默认为当前控制器,即用户。试试这个

<%= form_for(:farm, :url => farms_path) do |f| %>

farms_path基本上是&#34; / farms&#34;,此路径的POST与&#39;创建&#39;相关联。行动。 (路线中的resources :farms行设置了这个)

然后它应该提交给#counc创建农场,这就是你期望它首先做的事情。