文档中可能有答案,但我似乎没有找到好的答案.所以在三个:url,:action,:方法中,在Rails中的form_for中使用它们时有什么不同?
我正在尝试将头像上传字段添加到我的个人资料页面,但是一旦我添加:html => {:multipart => true}到它,它就会吐出语法错误.
<%= form_for(@user), :html => { :multipart => true } do |f| %>
<%= render 'shared/error_messages', object: f.object %>
<%= f.label :name %>
<%= f.text_field :name %>
<%= f.label :email %>
<%= f.email_field :email %>
<%= f.label :password %>
<%= f.password_field :password %>
<%= f.label :password_confirmation, "Confirmation" %>
<%= f.password_field :password_confirmation %>
<%= f.label :avatar %>
<%= f.file_field :avatar %>
<%= f.submit "Save changes", class: "btn btn-large btn-primary" %>
<% end %>
Run Code Online (Sandbox Code Playgroud)
错误是:
syntax …Run Code Online (Sandbox Code Playgroud) 有没有文件或建议?
我使用单表继承来管理不同类型的项目.
楷模:
class Project < ActiveRecord::Base
end
class SiteDesign < Project
end
class TechDesign < Project
end
Run Code Online (Sandbox Code Playgroud)
从projects_controller编辑动作:
def edit
@project = Project.find(params[:id])
end
Run Code Online (Sandbox Code Playgroud)
查看edit.html.erb:
<% form_for(@project, :url => {:controller => "projects",:action => "update"}) do |f| %>
...
<%= submit_tag 'Update' %>
<% end %>
Run Code Online (Sandbox Code Playgroud)
更新projects_controller的操作:
def update
@project = Project.find(params[:id])
respond_to do |format|
if @project.update_attributes(params[:project])
@project.type = params[:project][:type]
@project.save
flash[:notice] = 'Project was successfully updated.'
format.html { redirect_to(@project) }
format.xml { head :ok }
else
format.html { render :action …Run Code Online (Sandbox Code Playgroud) 我想为用户设置CRUD,仅适用于我的Web应用程序的管理员.所以在routes.rb中:
namespace :admin do
resources :user
end
Run Code Online (Sandbox Code Playgroud)
这意味着:
admin_user_index GET /admin/user(.:format) admin/user#index
POST /admin/user(.:format) admin/user#create
new_admin_user GET /admin/user/new(.:format) admin/user#new
edit_admin_user GET /admin/user/:id/edit(.:format) admin/user#edit
admin_user GET /admin/user/:id(.:format) admin/user#show
PUT /admin/user/:id(.:format) admin/user#update
DELETE /admin/user/:id(.:format) admin/user#destroy
Run Code Online (Sandbox Code Playgroud)
显示,索引工作正常,但编辑和新的不.我一直在_form第一行得到这个错误:
#<#的未定义方法`user_path':0x007fb6645c6378>
这是这样的:
如何将form_for与命名空间资源一起使用?
我正在学习RoR,我正在尝试找到如何使用has_one模型在另一个中设置fields_for:
class Child < ActiveRecord::Base
belongs_to :father
accepts_nested_attributes_for :father
end
class Father < ActiveRecord::Base
has_one :child
belongs_to :grandfather
accepts_nested_attributes_for :grandfather
end
class Grandfather < ActiveRecord::Base
has_one :father
end
Run Code Online (Sandbox Code Playgroud)
我在Railscasts上使用嵌套模型表单第1部分来获取这些:在children_controller.rb中:
def new
@child = Child.new
father=@child.build_father
father.build_grandfather
end
def child_params
params.require(:child).permit(:name, father_attributes:[:name], grandfather_attributes:[:name])
end
Run Code Online (Sandbox Code Playgroud)
我的形式:
<%= form_for(@child) do |f| %>
<div class="field">
<%= f.label :name %><br>
<%= f.text_field :name %>
</div>
mother:<br>
<%= f.fields_for :father do |ff| %>
<%= ff.label :name %>
<%= ff.text_field :name %><br>
grand mother:<br>
<%= f.fields_for :grandfather …Run Code Online (Sandbox Code Playgroud) ruby-on-rails form-for fields-for nested-form-for ruby-on-rails-4
我在routes.rb中嵌套了这样的资源 - (我的rake:routes gist)
namespace(:admin) do
resources :restaurants do
resources :menus
resources :menu_items
end
end
Run Code Online (Sandbox Code Playgroud)
在控制器中:
def new
@restaurant = Restaurant.find(params[:restaurant_id])
@menu_item = @restaurant.menu_items.build
end
Run Code Online (Sandbox Code Playgroud)
试图通过网址创建一个新的MenuItem(action #new):http://127.0.0.1:03001/admin/restaurant/lamen_items/new 我收到错误:
NoMethodError in Admin/menu_items#new
Showing /home/fps/workspace3/peded/app/views/admin/menu_items/_form.html.erb where line #1 raised:
undefined method `admin_menu_items_path' for #<#<Class:0xb6582d78>:0xb6581f2c>
Extracted source (around line #1):
1: <%= form_for @menu_item do |f| %>
...
Run Code Online (Sandbox Code Playgroud)
如何使这个表格有效?它是由一个漂亮的脚手架创建的
UPDATE
我也在_form中试过这个:
<%= form_for [:restaurant, @menu_item] do |f| %>
Run Code Online (Sandbox Code Playgroud)
但以类似的错误结束:
Showing /home/fps/workspace3/peded/app/views/admin/menu_items/_form.html.erb where line #1 raised:
undefined method …Run Code Online (Sandbox Code Playgroud) 我需要一些关于Rails 4如何与has_one和belongs_to关联一起工作的指针.
我的表格没有保存has_one关系
发布模型
class Post < ActiveRecord::Base
validates: :body, presence: true
has_one :category, dependent: :destroy
accepts_nested_attributes_for :category
end
class Category < ActiveRecord::Base
validates :title, presence: true
belongs_to :post
end
Run Code Online (Sandbox Code Playgroud)
后控制器
class PostController < ApplicationController
def new
@post = Post.new
@post.build_category
end
def create
@post = Post.new(post_params)
end
private
def post_params
params.require(:post).permit(:body)
end
end
Run Code Online (Sandbox Code Playgroud)
表格在Post#new action中
<%= form_for @post do |form| %>
<%= form.label :body %>
<%= form.text_area :body %>
<%= fields_for :category do |category_fields| %>
<%= category_fields.label …Run Code Online (Sandbox Code Playgroud) ruby-on-rails form-for actioncontroller strong-parameters ruby-on-rails-4
我有一个用于创建材料的表单(标题,描述和内容 - 所有基础).表单保存这些细节很好,但它不保存user_id,user_id应该是current_user的user_id.我该怎么做呢?这一定很容易但到目前为止还没有任何工作.
def create
@material = Material.new(params[:material])
if @material.save
flash[:success] = "Content Successfully Created"
redirect_to @material
else
render 'new'
end
end
Run Code Online (Sandbox Code Playgroud) form_for通过该html: {class: "form-horizontal"}选项添加类会覆盖默认值new_model或edit_model类.如何在保留现有form_helper类的同时添加我的类?
我想要:
<form class="edit_model form-horizontal"> 要么
<form class="new_model form-horizontal">
代替:
<form class="form-horizontal">