使用link_to添加名称值

时间:2011-10-16 15:15:15

标签: ruby-on-rails-3 link-to

我正在使用link_to在我的Rails 3应用中创建一个对象。搜索为我提供了使用link_to方法:post的正确方法,但我想知道是否使用link_to传递我的对象的名称值。这是我的链接:

<%= link_to "Todo text", {:controller => "profiles", :action => "create_inside", :method => :post}, :class => "button white" %>

我的profiles_controller.rb

def create_inside
    @todo = Insidetodo.new
    @todo.save!
    if @todo.save
      redirect_to @profile.todo, :notice => 'Todo successfully added.'
    else
      render :action => 'new'
    end
  end

我的todo.rb模型:

class Todo < ActiveRecord::Base
  has_and_belongs_to_many :profiles
  validates :name, :presence => true
end

有没有办法将:name => "#{@user.profile.todotext}"添加到link_to,以便通过并保存?我不知道它是否正确创建,因为当我点击link_to时,我收到验证错误 - Validation failed: Name can't be blank

1 个答案:

答案 0 :(得分:1)

name

中传递link_to
<%= link_to "Todo text", {:controller => "profiles", :action => "create_inside", :name => "#{@user.profile.todotext}", :method => :post}, :class => "button white" %>

,控制器必须

def create_inside
  @todo = Insidetodo.new(:name => params[:name])
  if @todo.save
    redirect_to @todo.goal, :notice => 'Todo successfully added.'
  else
    render :action => 'new'
  end
end

但是link_to只会在url中传递name参数(例如<a href="/profiles/create_inside?name=xxx">Todo text</a>)。

如果您希望不在网址中发送该名称,您可能需要使用表单并使用提交按钮而不是链接,因为它表示操作而不是链接。

<%= form_tag(:controller => "profile", :action => "create_profile") do -%>
  <%= hidden_field_tag :name, @user.profile.todotext %>
  <%= submit_tag "Todo Text" %>
<% end -%>