在views/products/edit.html.erb我使用:
<%= form_for(:product, :url => {:action => 'update', :id => @product.id}) do |f| %>
Run Code Online (Sandbox Code Playgroud)
产生:
<form method="post" action="/aircons/8" accept-charset="UTF-8">
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
The action '8' could not be found for ProductsController
Run Code Online (Sandbox Code Playgroud)
尝试更新产品时id=8.
我认为表格的方法应该是put.是对的吗 ?我该怎么解决这个问题?
一些控制器代码:
def edit
@product = Product.find(params[:id])
end
def update
update_params_with_new_values(params)
@product = Product.find(params[:id])
if @product.update_attributes(params[:product])
flash[:notice] = "Product updated successfully."
redirect_to(:product => 'index')
else
render('edit')
end
end
def update_params_with_new_values(params)
params[:product][:shop_id] = Shop.create(:name => params[:new_shop]).id if params[:product][:shop_id] == "new_shop"
params[:product][:brand_id] = Brand.create(:name => …Run Code Online (Sandbox Code Playgroud) 我是Rails 3的新手,我坚持认为很容易解决的问题.我正在关注Head First:Rails中的示例,但得出他们正在使用rails 2的结论.
我做了一个像这样的html.erb文件:
<h1>New user</h1>
<% form_for(@user, :url=>{:action=>'create'}) do |f| %>
<p>Fullname: <%= f.text_field :fullname%></p>
<p>Username: <%= f.text_field :username%></p>
<p>Email: <%= f.text_field :email%></p>
<p>Password: <%= f.text_field :password%></p>
<p><%= f.submit "Create" %></p>
<% end %>
Run Code Online (Sandbox Code Playgroud)
我想显示这个表单出现当我去http:// localhost:3000/users/new所以我添加了这样的路线:
resources :users
match "users/new" => "users#new"
match "users/create" => "users#create"
Run Code Online (Sandbox Code Playgroud)
当我去地址时,它显示的是一个带有H1标题的网页:新用户,但它没有显示任何其他内容.
我忘记了什么?
我在格式化checkbox表单时遇到问题.
它目前在我的形式看起来非常小,我不知道如何使它更大.
代码如下:
<%= f.label :email %> <%= f.email_field :email %>
<%= f.label :password %> <%= f.password_field :password %>
<%= f.label :remember_me %> <%= f.check_box :remember_me %>
Run Code Online (Sandbox Code Playgroud)
也许这是我可以用CSS解决的问题,但目前我的其他领域没有使用任何..
只是一些信息,我正在使用twitter bootstrap,所以任何解决方案都可以使用.
我正在努力让Globalize3在我的应用上工作.我有博客文章的玩具项目,我想翻译.
我的网址看起来像这样: localhost/en/posts localhost/fr/posts
这就是我在我的工作中的表现 ApplicationController
before_action :set_locale
def set_locale
I18n.locale = params[:locale] if params[:locale] || I18n.default_locale
end
Run Code Online (Sandbox Code Playgroud)
我用它form_for来创建和更新帖子.这是视图代码:
<%= form_for(@post) do |f| %>
...
<% end %>
Run Code Online (Sandbox Code Playgroud)
它在我进入/new页面时工作正常,这是控制器代码:
def new
@post = Post.new
end
def create
@post = Post.new(post_params)
if @post.save
redirect_to action: :show, id: @post.id
else
render 'new'
end
end
Run Code Online (Sandbox Code Playgroud)
但是当我尝试使用url编辑帖子时/en/posts/1/edit,它会混合传递给的文件form_for.这是错误信息:
没有路由匹配{:action =>"show",:controller =>"posts",:locale =>#,:id => nil,:format => nil}缺少必需的键:[:locale,:id]
我的问题是:它为什么这样做,我该如何修复thix?
我已经尝试过一些事情,例如将form_for声明更改为:
<%= form_for(@post, url: {action: 'show', id: @post, …
我的form_for在我单独使用时起作用:
<h1>Contact Us</h1>
<%= @contact.errors.full_messages.join(', ') %>
<%= form_for @contact do |f| %>
<p>
<%= f.label :name %><br>
<%= f.text_field :name %>
</p>
<p>
<%= f.label :email %><br>
<%= f.text_field :email %>
</p>
<p>
<%= f.label :subject %><br>
<%= f.text_field :subject %>
</p>
<p>
<%= f.label :message %><br>
<%= f.text_area :message %>
</p>
<p>
<%= f.submit 'Submit Query', :class => 'submit-button btn btn-default' %>
</p>
<% end %>
Run Code Online (Sandbox Code Playgroud)
但是,当我使用样式和所有内容将其添加到我的Web应用程序的其余部分时,它将停止工作:
<!-- scrollToTop -->
<!-- ================ -->
<div class="scrollToTop"><i class="icon-up-open-big"></i></div>
<!-- page …Run Code Online (Sandbox Code Playgroud) 这段代码全部基于Michael Hartl的Ruby on Rails教程.我创建了一个assigned在我的动作users_controller与
def assign
puts "in assign..."
@scout = User.find(params[:follower_id])
@der = User.find(params[:followed_id])
end
Run Code Online (Sandbox Code Playgroud)
我意识到这目前没有做任何事情,但在_follow部分方面,我有
<%= form_for @user, url: { action: "assign" } do |f| %>
<div><%= hidden_field_tag :follower_id, @user.id %></div>
<%= f.label :followed_id, "Assign #{@user.name} to" %>
<%= f.collection_select :following, @ders, :id, :name, prompt: true %>
<%= f.submit "Assign", class: "btn btn-primary" %>
<% end %>
Run Code Online (Sandbox Code Playgroud)
但是我收到了错误No route matches {:action=>"assign", :controller=>"users", :id=>"4"}.我是rails的新手,所以这可能只是一个愚蠢的问题.我究竟做错了什么?我需要修改我的routes.rb文件吗?另外,如果我尝试过<%= form_for @user do |f| …
我有一个用户模型:name和:is_admin属性.您不应该更改is_admin值.如果您编写的表单中任何用户都可以编辑其名称:
<%= form_for @user %>
<%= f.label :given_name %>
<%= f.text_field :given_name %>
<%= f.submit "Update" %>
<% end %>
Run Code Online (Sandbox Code Playgroud)
你在开辟安全漏洞吗?
亲切的问候,
我有一个带有单选按钮的form_for,我想在单选按钮更改时调用javascript函数.
单选按钮用于章节的字段'type',类型为boolean.
<%= form_for([book.category, book, chapter], remote: true ) do |f| %>
<%= f.radio_button :type, true, onKeyUp: "alert('hi')", checked: 'checked' %>
<%= f.label :type, 'Link' %>
<%= f.radio_button :type, false, onKeyUp: "alert('hi')" %>
<%= f.label :type, 'Text' %>
<% end %>
Run Code Online (Sandbox Code Playgroud)
我也试过onchange和onclick.我尝试在选项之前添加一个{},我从Rails得到一个错误,即参数太多了.
最终我想调用一个隐藏/显示其他文本字段的函数,但我甚至无法获取执行警报!
我确信这是非常简单的事情,但我一直在网上搜索这个问题的答案太久了.谢谢你的帮助!