Hey all,
I have a table helper. Basically I want only certain tables to have a
view link for each record. Im not sure the best way to achieve this but
the way I can up with is to check if the model contains a certain method
such as viewable and if it does, then you create the link in a table
cell:
def table(collection, header_names, fields, class_name)
return false unless collection.any?
table_str = “”
table_str += “<table id=”" + class_name + “” class="" + class_name
- “”>\n"
table_str += “\t\n”
table_str += “\t\t\n”
header_names.each do |name|
table_str += “\t\t\t”
table_str += name
table_str += “ | \n”
end
table_str += “\t\t
\n”
table_str += “\t\n”
table_str += “\t\n”
collection.each do |col|
table_str += “\t\t\n”
fields.each do |name|
table_str += “\t\t\t\n”
table_str += col[name].to_s
table_str += “\t\t\t | \n”
if
params[:controller].singularize.constantize.responds_to(:viewable)
table_str += “\t\t\t\t\n”
table_str += link_to “Edit”, edit_ +
params[:action].singularize + _path
table_str += “\t\t\t\t | \n”
end
end
table_str += “\t\t
\n”
end
table_str += “\t\n”
table_str += “\n”
table_str.html_safe
end
This file is located in helpers/layout_helper
Right now I get error: “wrong constant name user” when trying to display
the users page.
Or perhaps there’s a better way to determine whether you want to have a
link available for certain views (note this is not role-based user
authorization but rather some views will be editable and others not
period regardless of user)?
Thanks for response.
On Mar 23, 8:52pm, John M. [email protected] wrote:
params[:controller].singularize.constantize.responds_to(:viewable)
Presumably this is the line throwing the error. If params[:controller]
is users then you’ll be calling
constantize on the string user. Constants have to start with a capital
letter, so constantize throws an error.
As an aside, seing that much markup in a helper is off-putting(in the
same way that too much logic in a template is awkward), if I were you
i’d shift some of that into a partial
Fred
On 25 March 2011 16:47, John M. [email protected] wrote:
…
It works but I dont like that I am checking whether a model has the
method “viewable” just to display a link to a detail view in the table.
Is there a better way to determine if the current controller’s table
should contain a view or not?
Can’t you set an @variable in the controller and test it in the view
to determine whether to show the link?
Colin
Frederick C. wrote in post #988949:
On Mar 23, 8:52pm, John M. [email protected] wrote:
params[:controller].singularize.constantize.responds_to(:viewable)
Presumably this is the line throwing the error. If params[:controller]
is users then you’ll be calling
constantize on the string user. Constants have to start with a capital
letter, so constantize throws an error.
As an aside, seing that much markup in a helper is off-putting(in the
same way that too much logic in a template is awkward), if I were you
i’d shift some of that into a partial
Fred
Hey thanks you were right. Now it looks even more off putting:
def table(collection, header_names, fields, class_name)
return false unless collection.any?
table_str = “”
table_str += “<table id="” + class_name + “" class="” + class_name
-
“">\n”
table_str += “\t\n”
table_str += “\t\t\n”
header_names.each do |name|
table_str += “\t\t\t”
table_str += name
table_str += “\n”
end
if
params[:controller].singularize.capitalize.constantize.method_defined?
:viewable
table_str += “\t\t\t”
table_str += “View”
table_str += “\n”
end
table_str += "\t\t</tr>\n"
table_str += “\t\n”
table_str += “\t\n”
collection.each do |col|
table_str += “\t\t\n”
fields.each do |name|
table_str += “\t\t\t\n”
table_str += col[name].to_s
table_str += “\t\t\t\n”
end
if
params[:controller].singularize.capitalize.constantize.method_defined?
:viewable
table_str += “\t\t\t\n”
table_str += link_to ‘View’, :action => ‘show’, :id =>
col.id
table_str += “\t\t\t\n”
end
table_str += "\t\t</tr>\n"
end
table_str += “\t\n”
table_str += “\n”
table_str.html_safe
end
It works but I dont like that I am checking whether a model has the
method “viewable” just to display a link to a detail view in the table.
Is there a better way to determine if the current controller’s table
should contain a view or not?
Thanks for response.
On 25 Mar 2011, at 16:47, John M. [email protected] wrote:
Frederick C. wrote in post #988949:
On Mar 23, 8:52pm, John M. [email protected] wrote:
if
params[:controller].singularize.capitalize.constantize.method_defined?
:viewable
Why not just controller.respond_to? :viewable ?
Fred
Frederick C. wrote in post #989266:
On 25 Mar 2011, at 16:47, John M. [email protected] wrote:
Frederick C. wrote in post #988949:
On Mar 23, 8:52pm, John M. [email protected] wrote:
if
params[:controller].singularize.capitalize.constantize.method_defined?
:viewable
Why not just controller.respond_to? :viewable ?
Fred
Thanks for the idea. That should work.