【问题标题】:I want to create "Farm" instances through the users_controller我想通过 users_controller 创建“农场”实例
【发布时间】:2015-06-28 17:34:08
【问题描述】:

我有一个表单可以在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=>[:erb, :rjs, :builder, :rhtml, :rxml], :formats=>[:html], :locale=>[:en 创建, :en]} 在视图路径“/media/rok/LOCAL DISC/Users/Koko/Documents/KMETIJE/kmetije/app/views”中

然后我将创建操作也添加到 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

感谢您的宝贵时间。

【问题讨论】:

  • form_for(:farm, :url =&gt; farms_path)替换form_for(:farm, :url =&gt; {:action =&gt; :create})

标签: ruby-on-rails


【解决方案1】:

这使它提交给用户/创建,因为您没有指定控制器,只是一个动作。

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

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

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

farms_path 基本上是“/farms”,到此路径的 POST 与“创建”操作相关联。 (您的路线中的resources :farms 行设置了这个)

然后它应该提交给farms#create,这正是你最初期望它做的事情。

【讨论】:

  • 酷。这样做实际上更好form_for(@farm),其中@farm 是一个农场对象:如果@farm 是未保存的记录,它将自动提交给农场#create 操作,如果它是以前保存的记录,它将提交给农场#update .
猜你喜欢
  • 1970-01-01
  • 2010-09-21
  • 1970-01-01
  • 1970-01-01
  • 2014-05-29
  • 1970-01-01
  • 2015-08-16
  • 1970-01-01
  • 2021-04-23
相关资源
最近更新 更多