我的控制器中有方法:
def work_here
@company = Company.find(params[:id])
current_user.work_apply(current_user, @company)
redirect_to company_path
end
Run Code Online (Sandbox Code Playgroud)
在我看来:
<%= render 'companies/work_form' if signed_in? %>
Run Code Online (Sandbox Code Playgroud)
_work_form.html.erb:
<%= form_for company, :remote => true, :url => { :controller => "companies", :action => "work_here" } do |f| %>
<%= f.hidden_field :id, :value => company.id %>
<%= f.submit "I working here" %>
Run Code Online (Sandbox Code Playgroud)
<%end%>
我有一个work_here.js.erb文件:
$("#work_at_form").html("<%= escape_javascript("render('companies/works')") %>")
Run Code Online (Sandbox Code Playgroud)
但是我的表单没有ajax请求(在其他页面中ajax forks很好),我的js.erb文件永远不会使用.任何人都可以给我建议吗?谢谢.
我以这种方式组织项目:用户是主要资源,每个用户都有一个配置文件,每个配置文件有一个位置如下:
resources :users do
resource :profile, :controller => "profiles" do
resource :location
end
Run Code Online (Sandbox Code Playgroud)
现在我必须构建一个表单来插入所有的配置文件信息,但也包括位置信息(地址等).如果我写下面的代码,它不会关心位置.
<%= form_for(@profile, :url=>{:action=>'update'}, :html => {:multipart => true}) do |f| %>
Run Code Online (Sandbox Code Playgroud)
有人对这种情况有什么建议吗?
TNX
在我的Ruby on Rails代码中,我有以下edit.html.erb文件用于任务:
<%= render 'form' %>
Run Code Online (Sandbox Code Playgroud)
然后我在同一目录中有一个_form模板,代码如下:
<%= form_for @task do |f| %>
<%= fl.label :title %><br />
<% end %>
Run Code Online (Sandbox Code Playgroud)
问题是我在尝试导航到编辑页面时遇到错误.错误显示"未定义的task_path",所以我可以告诉Rails没有正确识别我的任务的路径.
程序结构的方式是我有一个包含许多任务的List,每个任务都有一个列表.routes文件以这种方式声明结构:
resources :lists do
resources :tasks
end
Run Code Online (Sandbox Code Playgroud)
如何让form_for识别我正在尝试编辑/ lists /:list_id/tasks /:task_id/edit中的任务?
谢谢您的帮助!
我在两个模型之间有一个has_one/belongs_to关联 - > User和ContactCard.虽然我能够为用户创建联系人卡片,但每当我尝试编辑卡片时,都会从ContactCardsController调用创建操作而不是更新(我可以告诉因为我在每个卡片上都有不同的成功消息).它改变了联系卡的属性,我不得不说.我很高兴它正在工作,但宁愿修补我对铁路路径和关联的理解上的任何差距.我错过了什么?为什么不使用我期望的动作?另外,如果你知道网上或github上有任何相关的例子,我可以研究,我全都听见了.谢谢!
联系卡控制器......
class ContactCardsController < ApplicationController
def create
current_user.build_contact_card(params[:contact_card])
if current_user.contact_card.save
flash[:success] = "Contact Card created!"
redirect_to '/account'
else
flash[:error] = "Fail!"
redirect_to '/account'
end
end
def update
if current_user.contact_card.update_attributes(params[:contact_card])
flash[:success] = "Profile updated."
redirect_to '/account'
else
flash[:error] = "Fail!"
redirect_to '/account'
end
end
Run Code Online (Sandbox Code Playgroud)
链接到编辑表单...
<%= link_to "Edit Profile", edit_user_contact_card_path(current_user) %>
Run Code Online (Sandbox Code Playgroud)
编辑表格......
<%= form_for [current_user, current_user.build_contact_card], :url => user_contact_card_path(current_user) do |f| %>
<%= f.label :first_name %>
<%= f.text_field :first_name %>
<%= f.label :last_name %>
<%= f.text_field :last_name …Run Code Online (Sandbox Code Playgroud) 正如下面所述的错误消息,我不使用"user_profiles_path"作为复数,因为我在嵌套资源中定义了"resource:profile".
NoMethodError in Profiles#new
Run Code Online (Sandbox Code Playgroud)
显示/home/smileymike/rails_projects/bffmapp_v2/app/views/profiles/new.html.erb其中线#20提出:
undefined method `user_profiles_path' for #<#<Class:0x90266ac>:0xa041294>
Run Code Online (Sandbox Code Playgroud)
模型:
class User < ActiveRecord::Base
has_one :profile
class Profile < ActiveRecord::Base
attr_accessible :name, :surname
belongs_to :user
Run Code Online (Sandbox Code Playgroud)
routes.rb中:
resources :users do
resource :profile (note: has_one)
end
Run Code Online (Sandbox Code Playgroud)
查看:profiles/new.html.erb
<div class="row">
<div class="span6 offset3">
<%= form_for([@user, @profile]) do |f| %>
<%= f.label :name %>
<%= f.text_field :name %>
<%= f.label :surname %>
<%= f.text_field :surname %>
<%= f.submit "Create my profile", class: "btn btn-large btn-primary" %>
<% end %>
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
路线
user_profile …Run Code Online (Sandbox Code Playgroud) controller ruby-on-rails form-for nested-resources ruby-on-rails-3
我们正在运行Rails 3.2.19和Ruby 2.1.2.
我们有一个传统的代码行(实际上,不止一行,但这一行特别值得关注)
form_for [@commentable, @comment], :html => { :multipart => true, :class => "lightbox_form"} do |f|
表格数据可以包括或不包括由用户自行决定的上传文件.
SO中的许多示例都指的是指定:multipart设置,但后来我在Form_for中看到了这个答案:multipart => true吐出然后查看http://guides.rubyonrails.org/v3.2.19/form_helpers上的文档. html#uploaded-files,我看到它不应该是必要的(除非使用form_tag).我也在https://github.com/rails/rails/issues/10176上看到这个讨论,这增加了我的困惑.
我问的部分是因为我们在Rack中遇到EOF错误(没有内容通过多部分解析器; 如果你对这些细节感兴趣,请参阅Rack throw EOFError(错误内容正文)).
我们的代码可能以前在早期版本的Rails中运行时可能是必要的(因此可能只是一个保留).但是考虑到包含SO的所有其他示例:multipart,我想在删除之前更好地了解是否:multipart需要或何时需要,form_for以及我可能遇到的副作用.
有没有办法限制rails中的datetime_select,以便它只显示某些小时,例如,所以唯一的选项是下午5点到晚上10点?目前只有这个:`
<%= f.label :time %><br>
<%= f.datetime_select :time, :minute_step => 30 %>`
Run Code Online (Sandbox Code Playgroud) 我有一个带有简单文本字段的表单,需要填写以下表单:
<%= f.text_field :email, :required => true %>
Run Code Online (Sandbox Code Playgroud)
下一个字段是collection_select类型,我要在其中强制用户选择一个选项。我试过了:
<%= f.collection_select(:list_ids, List.where(user_id: current_user), :id, :name, {}, {multiple: true}), :required => true %>
Run Code Online (Sandbox Code Playgroud)
这给了我错误:
syntax error, unexpected ',', expecting ')' ..., :name, {}, {multiple: true}), :required => true );@output_... ... ^
Run Code Online (Sandbox Code Playgroud)
没有:required => true选项,代码可以正常工作。在这种情况下,如何强制用户选择?谢谢
我想在Rails中使用form_for中的select方法.我不太清楚该怎么做.谁能指点我一个例子?
我有一个像这样的form_for:
<%= form_for(@post) do |f| %>
Run Code Online (Sandbox Code Playgroud)
我想提交一个不是模型属性的参数
<%= f.text_field :label%>
Run Code Online (Sandbox Code Playgroud)
我有一个Label模型(标签has_many:帖子和帖子has_many:标签),在posts_controller的创建操作中,我想根据标签text_field创建一个新的Label对象.通过上面的text_field我得到:
undefined method `label'for #<Object>
Run Code Online (Sandbox Code Playgroud)
我怎样才能实现这一目标?
提前致谢!
form-for ×10
ruby-on-rails ×10
ruby ×2
action ×1
activerecord ×1
ajax ×1
associations ×1
controller ×1
field ×1
forms ×1
has-one ×1
rack ×1
resources ×1