Mat*_*t D 2 controller model ruby-on-rails view
新的铁路所以请耐心等待.我想做的是,我在屏幕上有一个消息列表.我希望将消息标记为"已关闭",这意味着它只需填写一个完整的日期.
我有一个模特:
class Message < ActiveRecord::Base
attr_accessible :topic, :body, :completeDate, :created_at
belongs_to :account
belongs_to :user
has_many :message_followups
end
Run Code Online (Sandbox Code Playgroud)
我有一个控制器:
class MessagesController < ApplicationController
def close
@message = Message.find(params[:messageId])
@message.completeDate = Date.today
if @message.save
redirect_to myHomeMessages_path, :flash => { :success => "Your message was closed." }
else
redirect_to myHomeMessages_path, :flash => { :error => "Error closing message." }
end
end
end
Run Code Online (Sandbox Code Playgroud)
我有一个观点:
<%= form_for (???) do |f| %>
Are you sure you wish to close this message?<br>
<%= hidden_field_tag 'messageId', message.id.to_s %>
<%= submit_tag "Close Message" %>
<% end %>
Run Code Online (Sandbox Code Playgroud)
我在找出如何获取form_for或form_tag以在消息控制器中调用特定方法'close'时遇到问题.非常感谢任何帮助,谢谢.
马特
一个非常重要的提示,你不应该在Ruby上使用camel case作为变量名,变量sand方法应该使用下划线作为分隔符,如果你来自Java之类的另一种语言,尽量避免使用你在那里使用的相同命名模式.ruby中的Camel case仅适用于类和模块名称.
我猜你正在使用Ruby on Rails 3,因为你没有说过你正在使用的东西.首先,你需要一个路由,它会在你的routes.rb文件中看起来像这样:
resources :messages do
member do
post 'close'
end
end
Run Code Online (Sandbox Code Playgroud)
对控制器稍有改动
def close
@message = Message.find(params[:id]) #you don't need to use the hidden field here
@message.completeDate = Date.today
if @message.save
redirect_to myHomeMessages_path, :flash => { :success => "Your message was closed." }
else
redirect_to myHomeMessages_path, :flash => { :error => "Error closing message." }
end
end
Run Code Online (Sandbox Code Playgroud)
你的表单看起来像这样:
<%= form_for( @message, :url => close_message_path( @message ), :html => { :method => :post } ) do |f| %>
Are you sure you wish to close this message?<br>
<%= f.submit "Close Message" %>
<% end %>
Run Code Online (Sandbox Code Playgroud)
此表单将发布到"/ messages/ID_HERE/close",Rails将在您的请求中将"ID_HERE"值设置为"id"参数.
| 归档时间: |
|
| 查看次数: |
8821 次 |
| 最近记录: |